tt000 发表于 2021-7-23 14:14:37

C++问题

本帖最后由 tt000 于 2021-7-23 16:17 编辑

4单选(2分)
写出下面程序的输出结果:

unsigned int x = 0xffffffff;

unsigned int b = x + 2;


int y = x;


printf("%x,%d,%x,%d",y,y,b,b);


A.
其他三个选项都不对


B.
ffffffff,4294967295,1,1


C.
ffffffff,4294967295,100000001,4294967297


D.
ffffffff,-1,1,1

临时号 发表于 2021-7-24 00:26:34

选D

tt000 发表于 2021-7-24 08:46:41

临时号 发表于 2021-7-24 00:26
选D

为什么

临时号 发表于 2021-7-24 14:55:07

本帖最后由 临时号 于 2021-7-24 15:05 编辑

x为无符号整型的最大值,b = x + 2时发生了溢出,即b = 1,因此可排除C选项,%d显示的是int型因此不管x是否为int类型,都会以int类型显示出来,而int型的-1与unsigned int的十六进制数ffffffff在二进制上表示是一样的,因此,y用int类型显示出来是-1,因此选D
页: [1]
查看完整版本: C++问题