計算機中有符號整數“循環”


大家都知道計算機中整數都是以補碼形式存放的,正數的補碼是它本身,負數的補碼是數值位取反,再加1。

計算機中int是4字節(16位二進制數),short是2字節(8位二進制數)。這里用5位二進制數做例子,方便說明原理:

1、0一直加1直到加到15,在計算機中應該是0 0000,0 0001,0 0010, 0 0011,……,0 1110,0 1111

2、-15一直加1加到-1,在計算機中應該是1 0001,1 0010,1 0011,……,1 1110,1 1111

3、注意15加1結果應該是:0 1111+0 0001=0 10000  是正的16,但是超出了存儲空間(溢出),只能去低5位1 0000,那么這個1 0000是哪個數在計算機中的表示?

再拿1 0000再加1應該是:1 0000+0 0001=1 0001,這個1 0001是-15在計算機中的表示,從這個角度來講1 0000應該表示的是-16;可以寫程序驗證一下計算機是如何看待這個1 0000的?

計算機的int是16位的:最大整數是2*15-1=2147483647

#include <stdio.h>

int main()
{
int num = 0X7FFFFFFF;
printf("%d\n\n\n\n",num);
num = 0X80000000;
printf("%d\n", num);
return 0;
}
結果:


計算機就認為1 0000是負的 4位二進制數表示的最大整數+1。

如果計算機中的數可以表示在數軸上,應該就是下面圖上顯示的:



注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com