你能解释的家伙我溢出和下溢如何工作的signed char,并unsigned char?
int main () {
signed char c;
scanf("%d",&c);
printf("%d\n",c);
printf("%c\n",c);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,如果谢谢scanf,我说c=200有一个溢出,这是由第一个显示printf.
第二个printf给我相同的ASCII符号200 ...
为什么?
scanf的%d预期的int,所以给它任何东西是不确定的行为.
你应该做这个:
int d;
scanf("%d", &d);
whatevertype c = (whatevertype)d;
Run Code Online (Sandbox Code Playgroud)
但是,有符号整数溢出未定义.但是如果你使用无符号类型,比如
unsigned char c = (unsigned char)d;
Run Code Online (Sandbox Code Playgroud)
然后c保证d模数2为a中位数的幂unsigned char.