補碼的定義:
正數的補碼等於正數的原碼;
負數的補碼為其原始碼除符號位不動,其餘各位變反再加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
補碼的定義:
正數的補碼等於正數的原碼;
負數的補碼為其原始碼除符號位不動,其餘各位變反再加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