解题思路:
1)占位符%d %d 就表示一定是整数,那就一定是int 和 short
2)short型数据的范围是-32768 ~ 32767, int型数据范围远大于此。因此正常输出的一定是int型,而输出为-32768一定是short类型变量发生了溢出
3)我们知道在计算机系统中,数值一律用补码来表示(存储),16位二进制数可以表示2的16次方个编码,而在补码中零的编码只有一个,但是0的原码却有两个,也就是补码中会比原码多一个编码出来,这个编码就是1000000000000000,因为任何一个原码都不可能在转成补码时变成1000000000000000。所以,人为规定1000000000000000这个补码编码为-32768。
4)32768我们可以理解成32767 + 1
32767在计算机内存中补码表示0111 1111 1111 1111
1在计算机内存中补码表示0000 0000 0000 0001
32767+1利用补码相加在计算机内存中的补码表示结果为1000 0000 0000 0000
该补码表示的即为 -32768
那为什么32768没办法直接转换成补码呢
因为对于16位的有符号数来说,没办法表达32768,会溢出,所以我们要拆成补码的形式去相加理解,就可以反推出溢出的数等于多少了
注意事项:
参考代码:
#include<stdio.h>
int main()
{
print("D C\n");
return 0;
}
0.0分
8 人评分
程序员的表白 (C语言代码)浏览:706 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:702 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:485 |
小O的数字 (C语言代码)浏览:1490 |
C语言程序设计教程(第三版)课后习题11.1 (C语言代码)浏览:504 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:559 |
【计算球体积】 (C语言代码)浏览:1619 |
C语言程序设计教程(第三版)课后习题5.5 (Java代码)浏览:563 |
2004年秋浙江省计算机等级考试二级C 编程题(2) (C语言描述——递归算法)浏览:1150 |
循环链表与单个结点删除浏览:1115 |