亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么對帶符號的數字寧愿用二進制補碼,也不用符號和幅值?

為什么對帶符號的數字寧愿用二進制補碼,也不用符號和幅值?

慕無忌1623718 2019-12-07 14:44:20
我只是很好奇,是否有原因要以二進制形式表示-1,使用二進制補碼:翻轉位并加1?-1由11111111(二進制補碼)表示,而不是(對我來說更直觀)10000001,后者是二進制1,第一位為負標志。免責聲明:我的工作不依賴于二進制算法!
查看完整描述

3 回答

?
慕的地6264312

TA貢獻1817條經驗 獲得超6個贊

在我解釋這個之前,讓我們回到基礎。2'補碼是1的補碼+ 1?,F在,什么是1的補碼,以及它的意義又是什么。


任何n位數字及其1的補數之和為您提供了可以由這些n位表示的最大數字。例:


?0010 (2 in 4 bit system)

+1101 (1's complement of 2)

___________________________

?1111? (the highest number that we can represent by 4 bits)

現在,如果我們嘗試將結果再加1,將會發生什么。這將導致溢出。


結果將1 0000是0(因為我們正在處理4位數字,(左側的1是溢出)


所以,


Any n-bit number + its 1's complement = max n-bit number

Any n-bit number + its 1'complement + 1 = 0 ( as explained above, overflow will occur as we are adding 1 to max n-bit number)

然后有人決定將1的補碼+ 1稱為2'補碼。因此,上面的語句變為:任何n位數字+它的2的補碼= 0,這意味著一個數字的2的補碼=-(該數字的)


所有這一切又產生了一個問題,為什么我們只能使用n位中的(n-1)代表正數,為什么最左邊的n位代表正負號(最左邊的0代表+ ve數,而1意味著-ve號)。例如,如果第32位為1,則為什么僅使用java中int的前31位表示正數,即它的a -ve數。


?1100 (lets assume 12 in 4 bit system)

+0100(2's complement of 12)

___________________________

1 0000(結果為零,進位1溢出)


因此,(n的n + 2'的補數)= 0的系統仍然有效。這里唯一的歧義是2的12的補碼是0100,除了2s補碼系統中表示-12之外,它也歧義地表示+8。


如果正數的最左位始終為0,將解決此問題。在那種情況下,它們的2的補碼在其最左邊的位將始終為1,并且我們不會出現表示2的補碼和+ ve數的同一位集合的歧義。


查看完整回答
反對 回復 2019-12-07
  • 3 回答
  • 0 關注
  • 772 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號