读书人

无符号数相减解决方案

发布时间: 2012-05-14 15:24:34 作者: rapoo

无符号数相减
请教:
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.
理解完这个你应该就知道为什么了

读书人网 >C++

热点推荐