負數補碼怎麼算啊、裡邊老有個符號位、符號位是指的哪位啊?

負數補碼怎麼算啊、裡邊老有個符號位、符號位是指的哪位啊?前川陽光2020-02-20 00:11:07

並不是符號位。只要把模選到大於鄰域的二倍,則數值位向左的所有位數皆可“看作”符號位,但它們對2的n次方的模來說是數值,對2的n一1次方減1的模來說是整數商。什麼符號位不變,其它位取反加一,只是方便計算而已,與補碼無關。

負數補碼怎麼算啊、裡邊老有個符號位、符號位是指的哪位啊?使用者31094576744052019-10-07 02:15:52

補碼的定義:

正數的補碼等於正數的原碼;

負數的補碼為其原始碼除符號位不動,其餘各位變反再加1。

比如,十進位制數35和-1在8位機中的補碼錶示為:

x1=35, x2=-1;

因為x1>0,所以[x1]補=[x1]原=0010 0011;

因為x2<0,所以[x2]原=1000 0001;

[x2]補=1111 1110+1=1111 1111;

對於機器來說,它記錄的只是補碼本身:0010 0011和1111 1111,也就是說機器並不知道這段補碼是有符號數還是無符號數,但是當你使用高階語言編寫程式,定義了int或者unsigned int,那麼就會根據相應的定義,認為這段機器碼的第一位是數值位或者符號位。

其中,64位程式上的C語言整型資料型別的典型取值範圍為

int:-2 147 483 648 ~ 2 147 483 647

unsigned int:0 ~ 4 294 967 295

希望回答對你有幫助。

參考資料:

1。《C語言與程式設計(高等學校規劃教材)》曹計昌//盧萍//李開,電子工業出版社

2。《Computer Systems: A Programmer‘s Perspective(深入理解計算機系統》by Randal Bryant