计算机内部整数的表示(二进制存储)
10、在16位机器上跑下列foo函数的结果是(B)(阿里2014笔试题)
void foo()
{
int i = 65536;
cout << i<<”,”;
i = 65535;
cout << i;
}
A、-1,65535 B、0,-1 C、-1,-1 D、0,65535
解析:16位机器的int型变量为16位
16位int的表示范围:-32768到32767
65535(十进制) = 1111111111111111(二进制)
65536(十进制) = 10000000000000000(二进制)
上面是原码表示 (也是计算机内部补码的表示)
转换为原码,除了最高位,其它位取反,加一
原码输出:分别为0和-1
验证:
#include<stdio.h> int main() { __int16 a=65536; __int16 b=65535; __int16 c=65535+3; printf("十六进制输出:%x %x %x\n",a,b,c); printf("十进制输出:%d %d %d\n"); }
输出:
十六进制输出:0 ffffffff 2 十进制输出:0 -1 2