为什么最后无符号输出的是655534而不是2
答案:4 悬赏:70 手机版
解决时间 2021-11-19 20:04
- 提问者网友:咪咪
- 2021-11-18 19:27
为什么最后无符号输出的是655534而不是2
最佳答案
- 五星知识达人网友:旧脸谱
- 2021-11-18 19:46
u是无符号十进制数,这个要从编程原理解释,它会把-2中负数补码的符号位当成数的一部分一起输出,这个数的补码是0×fffffff,所以就输出了正数65534了,提醒一下你多打了一个5,最大值是65535。追问意思是其实输出的数还是-2 不过是以无符号的形式吗,刚学这个 很多不懂追答是的追问喔喔 谢了追答这个是输出形式,原数值还是-2,再输入printf(“%d/n,b”)还应该输出是-2的发错了,是printf(“%d/n”,b);
全部回答
- 1楼网友:未来江山和你
- 2021-11-18 22:56
题目 "655534" 应是问 65534 或 4294967294 吧。
输出语句里的格式定义,实际上是 程序员 对 输出 时 的数据转换要求。
%d 则是要求 把内存数据看成 有符号整型数值,
%u 则是要求 把内存数据看成 无符号整型数值。
负数,机器内用补码形式存放。 -2, 内存是 0xfffffffe.
你的程序用的是古老的机器,字长只有16位。所以 0xfffffffe 按16位 则等于 0xfffe.
%u 显示 0xfffe 成 10进制 65534. (32位机0xfffffffe 应得 4294967294)。
%d 显示 0xfffe (32位机0xfffffffe) 成 10进制 -2.
输出语句里的格式定义,实际上是 程序员 对 输出 时 的数据转换要求。
%d 则是要求 把内存数据看成 有符号整型数值,
%u 则是要求 把内存数据看成 无符号整型数值。
负数,机器内用补码形式存放。 -2, 内存是 0xfffffffe.
你的程序用的是古老的机器,字长只有16位。所以 0xfffffffe 按16位 则等于 0xfffe.
%u 显示 0xfffe 成 10进制 65534. (32位机0xfffffffe 应得 4294967294)。
%d 显示 0xfffe (32位机0xfffffffe) 成 10进制 -2.
- 2楼网友:冷風如刀
- 2021-11-18 22:20
不知道
- 3楼网友:忘川信使
- 2021-11-18 20:49
相当于模65536同余追问什么意思 刚接触
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯