无符号数相减
请教:
typedef unsigned short int Uint16;
Uint16 a=10;
Uint16 b=20;
那么Uint16 c= a-b得到65526,why,why?
short int d=a-b得到-10,so why??
请各位不吝赐教
[解决办法]
无符号数Uint16为16位2进制,
a=10,2进制表示为:00000000 00001010 ;
b=20,2进制表示为:00000000 00010100 ;
相减得 :11111111 1110110换成10进制就为65526。
而short型为16位有符号数,还有一个符号位,做加减的话就是和10进制直接加减答案相同。
[解决办法]
数字在内存里存储的都是以补码形式存储的!
正数的补码就是本身,负数的补码是其绝对值取反再加1.
理解完这个你应该就知道为什么了