整数溢出/下溢

时间:2017-09-20 03:27:58

标签: c integer-overflow unsigned-integer

我正在学习整数溢出和下溢,并且想知道是否可以通过给出负输入n来控制j的值?

int i = n;
size_t j = i;
printf("%lu",j);

例如,如果我想要“j”的值为255,是否可以设计负数“n”来给我输出?

1 个答案:

答案 0 :(得分:1)

我认为您正在寻找的是

signed char i = -1;
unsigned char j = i;
printf("%u\n", j);

在8位中,带符号的数字-1和#34;包围"无符号值255。

您问过size_t因为,是的,它是无符号类型,但它通常是32位甚至64位。在这些大小中,数字255在有符号和无符号变体中都是可表示的(并且具有相同的表示),因此不存在对应于255的负数。但是您可以使用不同的值看到类似的效果。例如,在具有32位整数的计算机上,此代码为:

unsigned int i = 4294967041;
int j = i;
printf("%d\n", j);

很可能会打印-255。这个值是因为2 ^ 32 - 255 = 4294967041。