整数溢出/下溢
问题描述:
我正在学习整数溢出和下溢,并想知道是否有可能通过给出负输入n来控制j的值?整数溢出/下溢
int i = n;
size_t j = i;
printf("%lu",j);
例如,如果我想“J”的数值是255,是有可能工艺的负数“n”来给我输出?
答
我想你要找的是什么
signed char i = -1;
unsigned char j = i;
printf("%u\n", j);
在8位,有符号数-1“环绕”无符号价值255
你问到size_t
,因为是它是一个无符号类型,但通常是32甚至64位。在这些尺寸中,数字255在有符号和无符号变体中都是可表示的(并且具有相同的表示形式),所以不存在对应于255的负数。但是,您当然可以看到类似的效果,并使用不同的值。例如,在具有32位整数的机器上,此代码:
unsigned int i = 4294967041;
int j = i;
printf("%d\n", j);
很可能会打印-255。这个值是因为2^32 - 255 = 4294967041。
+0
在后面的代码中,行为是实现定义的(并且可能会引发一个信号) –
是的!您可以将'n'设置为255.:-P –
“整数下溢”不存在。在普遍接受的术语中,“下溢”只能发生在浮点算术中。作为你的问题,答案很简单:只需将你的'n'设置为'255'。答案的简单和琐碎让人怀疑你错过了你的问题。 – AnT
对不起,我的意思是给予负值。我已更新问题 –