此代码生成255
的(不正确)结果
#include <stdio.h>
int main()
{
unsigned char x = 0;
x = (x-1)%16;
printf("%d", x);
return 0;
}
虽然这段代码产生的结果15
我觉得是正确的
#include <stdio.h>
int main()
{
unsigned char x = 0;
x--;
x %= 16;
printf("%d", x);
return 0;
}
当这个意想不到的结果发生时,我正试图利用下溢对我有利。unsigned int
或任何其他无符号整数类型不会出现问题。
1条答案
按热度按时间sgtfey8w1#
参见this post. x-1被隐式提升为signed int,实际上变成了
-1
.-1 % 16
(因此“-1 /16的余数”)仍然是-1,然后它被转换回unsigned char,即255。