无符号数相减

txgc1009 2012-05-13 01:52:42
请教:
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??

请各位不吝赐教
...全文
691 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
txgc1009 2012-05-13
  • 打赏
  • 举报
回复
懂了,感谢DAsama和zm19870528,以后又问题继续发问。
screwzm 2012-05-13
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

DAsama,你这么一解释,我理解65526的由来;
但是-10如何来?
困惑:
11111111 1110110转换成short int的有符号数,为什么是-10,请再一次详解
[/Quote]
-10的补码:
1、取绝对值,得10,即0000 0000 0000 1010
2、取反,~0000 0000 0000 1010,得1111 1111 1111 0101
3、加1,1111 1111 1111 0101 + 1 = 1111 1111 1111 0110
即-10在内存里就是以1111 1111 1111 0110存储的,只不过看你怎么去读取而已。
DAsama 2012-05-13
  • 打赏
  • 举报
回复
lz你。。。。,要学会举一反三:
short int d=a-b;你申明了d是short型的,是有符号数对吧,所以
是有一位符号位的a-b结果虽然是11111111 1110110,但是此时符号位是1,表示为负数,所以为-10。
unituniverse2 2012-05-13
  • 打赏
  • 举报
回复
short int a = (short int)65526;
a当然是-10了
txgc1009 2012-05-13
  • 打赏
  • 举报
回复
DAsama,你这么一解释,我理解65526的由来;
但是-10如何来?
困惑:
11111111 1110110转换成short int的有符号数,为什么是-10,请再一次详解
screwzm 2012-05-13
  • 打赏
  • 举报
回复
数字在内存里存储的都是以补码形式存储的!
正数的补码就是本身,负数的补码是其绝对值取反再加1.
理解完这个你应该就知道为什么了
DAsama 2012-05-13
  • 打赏
  • 举报
回复
无符号数Uint16为16位2进制,
a=10,2进制表示为:00000000 00001010 ;
b=20,2进制表示为:00000000 00010100 ;
相减得 :11111111 1110110换成10进制就为65526。
而short型为16位有符号数,还有一个符号位,做加减的话就是和10进制直接加减答案相同。

64,662

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧