我想问个问题

qdmy 2004-01-18 07:56:01
大家好,我是刚开始学习C语言的学生,我想问一个很菜的问题,希望能有人帮我解决一下,万分感谢!!
题1:int x=-10000L;为何结果为x=31072?
题2:unsigned int n;int i=-521;n=i;为何结果为n=65015?
...全文
16 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
KingI 2004-01-18
  • 打赏
  • 举报
回复
我的编译器计算的结果都正确
1.-10000
2.-521
lifanxi 2004-01-18
  • 打赏
  • 举报
回复
您可以学习一下补码的知识,符号数在机器里是补码的型式表示的。
正数的补码是它本身,负数的补码是它的各二进制位取反后加一。
以题2为例。521是0000001000001001,取反是1111 1101 1111 0110加一是1111110111110111,如果把它作为无符号数转为十进制就是。
李马 2004-01-18
  • 打赏
  • 举报
回复
1、不知道你用的什么编译器,我在VS.net 2003和TC2下做了测试,结果都是-10000。
2、由于在内存中负数是按照补码存放的,所以i在内存中(16位编译器的情况)的表示应该为0xFDF7,然后你把i的值赋给了一个无符号数n,而无符号的FDF7就是65015。你可以试一试,在32位的环境下n会是另外一个结果。

69,379

社区成员

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

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