【发布时间】:2018-02-28 23:13:01
【问题描述】:
我正在学习整数上溢和下溢,想知道是否可以通过给出负输入 n 来控制 j 的值?
int i = n;
size_t j = i;
printf("%lu",j);
例如,如果我希望“j”的值为 255,是否可以制作负数“n”来给我那个输出?
【问题讨论】:
-
是的!您可以将
n设置为 255。:-P -
没有“整数下溢”这样的事情,在普遍接受的命名法中,“下溢”只能发生在浮点运算中。作为您的问题,答案很简单:只需将您的
n设置为255。答案的简单性和琐碎性使人怀疑您在问题中遗漏了某些内容。 -
对不起,我的意思是给出负值。我已经更新了问题
-
n的类型是什么?无论如何,如果不知道size_t类型的确切特征(特别是它的范围),就不可能回答关于n负值的问题。它依赖于平台。您应该使用%zu打印size_t值,而不是%lu。 -
如果您将包含
-1的变量转换为uint8_t,您将得到255。但是,255小于0x8000,因此我认为您无法通过将负数转换为任何大于 8 位的整数类型来获得它。不用说,我认为你不会找到任何unsigned long大小仅为 8 位的现代平台(或古代平台)。
标签: c integer-overflow unsigned-integer