C语言问题 请问为何d输入65525 输出为何是-11?
答案:2 悬赏:0 手机版
解决时间 2021-03-04 11:44
- 提问者网友:抽煙菂渘情少年
- 2021-03-04 03:15
C语言问题 请问为何d输入65525 输出为何是-11?
最佳答案
- 五星知识达人网友:杯酒困英雄
- 2021-03-04 04:41
%u : 65525 表示成2进制就是 1111 1111 1111 0101
%d : 2进制 第一位是符号位1 为负数
%d : -1的2进制是 1111 1111 1111 1111
同样你之前的65525用%d,他就是这个结果
负数二进制
网页链接
追问不太明白追答一个字节16位
%u 65525 写入内存就是
1111 1111 1111 0101
因为%u没有符号位,当用%d输出这个数字时,因为%d有符号位 所以这个数就是个负数,结果就是-11.
意思就是这一堆二进制数%d就表示-11
%d : 2进制 第一位是符号位1 为负数
%d : -1的2进制是 1111 1111 1111 1111
同样你之前的65525用%d,他就是这个结果
负数二进制
网页链接
追问不太明白追答一个字节16位
%u 65525 写入内存就是
1111 1111 1111 0101
因为%u没有符号位,当用%d输出这个数字时,因为%d有符号位 所以这个数就是个负数,结果就是-11.
意思就是这一堆二进制数%d就表示-11
全部回答
- 1楼网友:琴狂剑也妄
- 2021-03-04 06:07
老式编译器,把 int 处理成 short int, 65525 数值范围超出了 short int 允许范围。
所以 65525 输出为 -11。
现在用的编译器,把 int 处理成 long int, 65525 不超界。
为了检验此结论,你可以用 %hd 格式 输出为短整型,体会一下。
int d=65525;
printf("%d, %hd\n", d, d);
输出: 65525, -11
[若输入用 scanf("%d, %o, %x, %u",&a,&b,&c,&d); // 数据 100,100,100,65525,结论还是如此]。
所以 65525 输出为 -11。
现在用的编译器,把 int 处理成 long int, 65525 不超界。
为了检验此结论,你可以用 %hd 格式 输出为短整型,体会一下。
int d=65525;
printf("%d, %hd\n", d, d);
输出: 65525, -11
[若输入用 scanf("%d, %o, %x, %u",&a,&b,&c,&d); // 数据 100,100,100,65525,结论还是如此]。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯