这是我的代码
#include <stdio.h>
int main(void) {
unsigned char ch = 244;
ch = ch << 31;
return 0;
}
我可以将ch
最多移位31位,这意味着ch
是32位,但是怎么办?
sizeof(ch)
也是1个字节。
答案 0 :(得分:4)
[...]表示
ch
是32位[...]吗?
不是。类型为int
的移位结果在分配回ch
时将被截断为8位。
您可以通过检查ch
的值来验证这一点。
gcc
会在-Wconversion
打开的情况下发现此问题:
$ gcc -Wconversion test.c
test.c:4:13: warning: implicit conversion loses integer precision: 'int' to 'unsigned char' [-Wconversion]
ch = ch << 31;
~ ~~~^~~~~
1 warning generated.
答案 1 :(得分:3)
“ Integer Promotion”应用于myArray
运算符的两个运算符。
然后完成转移。
后跟前一个操作结果的“ Implicit Conversion”,即赋值运算符的“ Left-Hand-Side”值的类型。