关于什么的原码、反码、补码,不打算在这赘述了
本文从一道笔试题,来看一下整数在内存中的存储,及运算,由此引发思考,计算机中为什么要用补码?补码为什么要设计成取反加一这种形式?
先上菜
在X86,VC++6.0环境下,有下列程序
#include<stdio.h>
int main()
{
char c;
unsigned char uc;
unsigned short us;
c = 128;
uc = 128;
us = c + uc;
printf(“0x%x”,us);
us = (unsigned char)c + uc;
printf(“0x%x”,us);
us = c + (char)uc;
printf(“0x%x”,us);
return 0;
}
输出结果为( )
A) 0x0 0x100 0xff00
B) 0x100 0x100 0xff00
C) 0x100 0x100 0x0
D) 0x0 0x100 0x0
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">据说这是“某为”在某年招聘时的一道笔试题</span>c = 128

本文通过一道笔试题探讨了整数在内存中的存储和运算,特别是补码的作用。在X86环境中,不同类型的变量相加涉及到类型提升和符号位扩展,补码的使用简化了加法和减法的硬件实现。减法可以通过加法实现,例如将6点逆时针拨到4点,相当于加-2,或者顺时针加10(模12)。补码设计成取反加一的形式,使得加补码等于减原码,简化了硬件设计。
最低0.47元/天 解锁文章
1322

被折叠的 条评论
为什么被折叠?



