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