C语言编程验证计算机原理的“溢出”
江苏省2020年普通高校对口单招文化统考计算机专业试卷第48题:
某计算机内整型数以2字节补码存储,计算-32767加-2的结果,以十进制表示为 ▲
这道题很多同学填的是“溢出”。因为2字节补码整数的表示范围是-32768~+32767,-32767加-2的数学值是-32769,确实超出了这个范围。
(-32767)补=1000000000000001
(-32767)补+(-2)补=10111111111111111
最左边的1溢出,余下的0111111111111111即32767
{short int i=-32767,j=-2,k;
那么,这道题到底是填“溢出”呢,还是填“32767”呢?这两个答案都有道理的,但是我们没有看到阅卷评分标准,不知道哪个答案算正确,抑或都算正确?
哪个答案正确先放一边,我们看一看整型数据的溢出问题。
2字节补码整数范围是-32768~+32767,-32767加-2的数学值是-32769,但是计算机中特定情况下因为溢出导致“绕回”,输出32767(-32769绕回到了正向最大值)。
那么,如果是-32767加-3呢?应该得不到-32770,应该输出32766吧?
{short int i=-32767,j=-3,k;
{short int i=-32767,j=-32769,k;
已知X、Y为两个带符号的定点整数,在计算机中以16位补码表示,它们为:X=-7FFEH,Y =-3,则[X-Y]补= 。
7FFEH+(-3)数学值是-32769,但是因为溢出导致绕回至正向最大值,输出32767
{short int x=-0x7FFE,y=-3,z;
printf("x=%d,y=%d\n",x,y);
对口单招考试,好多年没有看到官方的答案了,这是怎么了?
网上流传的答案,都是老师自己做的答案。这些网上流传的答案,
有的是错误的
,
后来
印到一些教辅资料中,几乎变成正确答案了
。
标签: