首页 > 代码库 > 坑爹!

坑爹!

读到0x1A时,fread就认为结束!

 

今天调到的bug,以解决

 

 

unsigned int16 范围是从0-65535 十六进制是 0X0000 - 0XFFFF 
int16 范围是 -32768-32767 负数以补码方式储存 

 

对一个整数的补码再求补码,等于该整数自身。

 

补码 = 反码+1

 

-5的原码(10000101)→符号位不变(10000101)→数值位取反(11111010)→加1(11111011)
所以-5的补码是11111011
 
原码 有符号的类型以最高位为符号位,1为负,0为正
 
 
 
 
 
unsigned int t = 2147483680

内存中是
t
0x80000020  
1000 0000 0000 0000 0000 0000 0010 0000
符号位不变 取反

1111 1111 1111 1111 1111 1111 1101 1111
除符号位
111 1111 1111 1111 1111 1111 1101 1111
2147483615
加一
2147483616
111 1111 1111 1111 1111 1111 1110 0000
得补码
1111 1111 1111 1111 1111 1111 1110 0000
signed int t = -2147483616
 
conclusion:-2147483616 is in the C memory with the form of its completion code:1000 0000 0000 0000 0000 0000 0010 0000

坑爹!