快速簡單地求負數的補碼和求補碼代表的負數
特點是:快速簡單實用,不用教科書的取反加一之類的麻煩方法。
//1 這是我認為必要的基本知識
補碼,是整數數字資料在計算機內部的儲存格式。
整數分為正數,
0,和負數。
1位二進位制數字可以表示2個不同的狀態,
2位二進位制數字可以表示4個不同的狀態,
3位二進位制數字可以表示8個不同的狀態,
(此處省略4行字,自己想吧。)
8位二進位制數字可以表示256個不同的狀態。
8位二進位制數字也叫乙個位元組。
乙個位元組表示的整數範圍是:
-128 -127 -126 .... -1 // 共128個負數,
0, // 0不分正負,只有乙個
和 1 2 3 ...到 127 // 共 127個正數。
也就是總共256個數字。
// 2 以上是基本知識,下面才是重點。
1111 1111
這顯然是負數的補碼,因為最高位是1。最高位也叫做符號位。
為什麼最高位是1就是負數的補碼呢?這個大有學問。此處省略一萬字。
是不是最高位是0就是正數呢?這個不一定。騎白馬的不一定都是王子,唐僧有時候也騎白馬。唯一的例外就是: 數字0 的最高位也是0.
這個補碼代表的負數是多少呢? // 這個才是重點。。
只要兩步,就可以解決這個問題。
第一步:把這個補碼當作無符號數來讀取。得到結果是255
第二步:把第一步的結果減去256,得到的差就是所求的負數。 255-256= -1
所以這個補碼是-1的補碼。
再給乙個例子:1000 0000 // 任意乙個負數的補碼都適用的。
第一步:128
第二步:128-256= -128
原來這就是 -128 的補碼啊!
這裡是1個位元組,減去的應該是2的8次方,
如果是2個位元組,減去的應該是2的16次方,
如果是4個位元組,減去的應該是2的32次方。
那麼 反過來怎麼辦呢?如求 -128 的補碼。
只要把我說的那兩步反過來就好了。
第一步:負數加上 256 -128+256=128
第二步:把上面的結果用二進位制表示 1000 0000 這就是負數的補碼
求序列和的簡單C程式
對於序列求和的程式大家不會陌生,而我今天看到的這個程式個人覺得比較好,所以貼上來共享一下。要求 輸入類似於87 98 67 56 0的任意序列,但是以零結尾。然後輸出序列的和。程式如下 name sum.c purpose sum author zimo date 01 21 2010 includ...
求整數二進位制中1的個數,其中負數用補碼表示
如果乙個整數不為0,那麼這個整數至少有一位是1。如果我們把這個整數減1,那麼原來處在整數最右邊的1就會變為0,原來在1後面的所有的0都會變成1 如果最右邊的1後面還有0的話 其餘所有位將不會受到影響。舉個例子 乙個二進位制數1100,從右邊數起第三位是處於最右邊的乙個1。減去1後,第三位變成0,它後...
zzuli1783 簡單的求和 求因子和
定義f i 代表i的所有因子和 包括1和i 給定乙個l,r。求f l f l 1 f r 第一行輸入乙個t t 1000 代表有t組測試資料,接下來每行輸入兩個數字l,r,1 l r 1000000 每行輸出乙個整數,代表和。21 2 3 44 11 include include include ...