1樓:考驕
你在看看,還是不對,全1表示的是-1,
1000...才表示-128
反碼概念,符號位不變,其他位取反(+1),全1反過來就全0,表示0的話就2個0了,所以負數在加個1
只有反碼才這樣
2樓:金半田
二進位制11111111代表-127,是按原碼規則來算。若按補碼規則,二進位制11111111算出來是-1。
文中說的是10000000代表-128。
詳細描述如下:
[+1] = [00000001]原 = [00000001]反 = [00000001]補
[-1] = [10000001]原 = [11111110]反 = [11111111]補
計算機將第1位作為符號位,0表示正數,1表示負數。
原碼:原碼很好理解,第1位是符號位,其餘位表示數值。
反碼:(1)正數:正數反碼是其本身。
(2)負數:去掉原碼符號位,其餘位按位取反。
補碼:(1)正數:正數補碼是其本身。
(2)負數:在反碼基礎上加1。
由上述定義可知:
[+0] = [00000000]原 = [00000000]反 = [00000000]補
[-0] = [10000000]原 = [11111111]反 = [00000000]補
既然+0和-0的補碼一致,所以只需保留一個(+0和-0原碼不同,注意看符號位)。
這樣一來,「[-0] = [10000000]原」相當於沒有使用,於是規定:「[10000000]」為-128。
既然是「規定」,就不能按原碼、反碼、補碼的規則計算了。設計計算機時就在硬體中設定為:10000000代表-128。
之所以引入補碼,是為了消除減法,用加負數來替代減法運算,這樣讓cpu設計更簡單。
3樓:自我程式設計
這裡說的是補碼,不是二進位制負數。
二進位制負數10000001到11111111表示-1到-127,而10000000表示的就是最小負數-128。
而負數在計算機中是以補碼儲存的。
負數->(原碼按位取反)反碼->補碼(反碼+1)。所以-1到-127的補碼就變成11111111到10000001。而0的原碼補碼還是0,-128的補碼是10000000。
所以如上題說的,-128~-1計時10000000~11111111。
4樓:
負數的補碼等於反碼+1
5樓:沙裡波特
二進位制11111111不是代表-127嗎?
--是的。 11111111 是-127的原碼。
為什麼是-128 呢?
--誰說的? 騙你的。
求助一個c語言問題?
6樓:聽不清啊
舉例說,char s[100];
才可以使用
scanf("%s",s);
進行輸入,如果是int a[100];
就不可以用
scanf("%d",a);
進行輸入。
C語言求助,C語言問題,求助
自己做個類,再生成一個陣列,不算難的,試試吧 給個提示吧 相當於一個通訊錄中查詢功能的變形。c語言求助 define m 5 define n 3 main b n c 8 for i 0 ic j for i 0 i printf 3d c i c語言問題,求助 這題是迷惑人用的 因為迴圈內部沒有...
c語言問題求助,C語言問題求助
include void sort int p1,int p2,int p3 else if p1 p3 else else if p2 p3 if p1 看下函式形參和實參的概念。include main void sort int p1,int p2,int p3 少括號 else 少括號 el...
求助,c語言問題,求助,c語言問題
結果 整個程式的功能其實就是用了三種方式輸出陣列中的6個數 陣列名a可以看成陣列首元素的地址,陣列開闢了一段連續的儲存空間,a i 逐個解引用陣列中的元素 pa a,讓指標pa指向陣列首元素,通過指標的移動輸出陣列中的元素 include int main i,pa for i 0 i 6 i 用陣...