快速簡單地求負數的補碼和求補碼代表的負數

2021-08-14 21:44:14 字數 1174 閱讀 2854

快速簡單地求負數的補碼和求補碼代表的負數

特點是:快速簡單實用,不用教科書的取反加一之類的麻煩方法。

//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 ...