补码疑问

wit2188 2007-10-07 02:05:36
-32768在内存中的二进制数表示为1000 0000 0000 0000,这实际上为补码,根据补码求不出十进制数,只有把它变成原码才行。求补码的原码只有对其本身求补,符号位不动后面取反加1后得到:0000 0000 0000 0000,这就怪了,这个数按权展开后并没有得到-32768,怎么回事?
...全文
116 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
wit2188 2007-10-08
  • 打赏
  • 举报
回复
那就是说-32768的表示1000 0000 0000 0000就是这么规定的,1000 0000 0000 0000无法通过某种转化计算得出-32768,是不是?
genieyyt 2007-10-08
  • 打赏
  • 举报
回复
一般的编译器,数出界就模除
比如 unsigned char a=265;
a是多少
a-256(char)=9
IlikeEnglish 2007-10-07
  • 打赏
  • 举报
回复
这是人为规定的。 -128 的补码为 1000 0000 同理可得-32768
wit2188 2007-10-07
  • 打赏
  • 举报
回复
为什么有溢出就回到最小数-32768?0000 0000 0000 0000怎么能转化成-32768?
hjzwl1018 2007-10-07
  • 打赏
  • 举报
回复
楼主的意思是什么?你要用short int(16位)的话,范围是:-32768~32767,如你所说,后16位全零,有溢出,由于是恰好(+1)溢出,所以回到最小数-32768
wit2188 2007-10-07
  • 打赏
  • 举报
回复
这个数按权展开后并没有得到-32768,怎么回事?-32768在内存中的二进制数是1000 0000 0000 0000吗?就算是,就算它是原码,你把它按权展开后能得到-32768吗?
genieyyt 2007-10-07
  • 打赏
  • 举报
回复
1000 0000 0000 0000
取反
0111 1111 1111 1111
+1 后
1000 0000 0000 0000
是这个结果么?


-32768在内存中的二进制数表示为1000 0000 0000 0000(这是原码)
1000 0000 0000 0000(这是补码=原码,但)
有符号数,1是最高位->符号位,即为-0,
有符号数的最小数-32768


wit2188 2007-10-07
  • 打赏
  • 举报
回复
你没看清我在问什么。
mochen5460 2007-10-07
  • 打赏
  • 举报
回复
因为32768表示成二进制数时,2个字节是不够的,而是1 0000 0000 0000 0000,所以自然就变马了全0.
wit2188 2007-10-07
  • 打赏
  • 举报
回复
没知道的?

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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