2017-09-20 82 views
0

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

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

例如,如果我想“J”的数值是255,是有可能工艺的负数“n”来给我输出?

+3

是的!您可以将'n'设置为255.:-P –

+0

“整数下溢”不存在。在普遍接受的术语中,“下溢”只能发生在浮点算术中。作为你的问题,答案很简单:只需将你的'n'设置为'255'。答案的简单和琐碎让人怀疑你错过了你的问题。 – AnT

+1

对不起,我的意思是给予负值。我已更新问题 –

回答

1

我想你要找的是什么

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

在后面的代码中,行为是实现定义的(并且可能会引发一个信号) –