gpt4 book ai didi

c - unsigned char 的大小是 8 位,但为什么我可以将它(向左或向右)移动 31 位或最多 31 位?

转载 作者:行者123 更新时间:2023-12-04 16:04:48 30 4
gpt4 key购买 nike

这是我的代码

#include <stdio.h>                  
int main(void) {
unsigned char ch = 244;
ch = ch << 31;
return 0;
}

我可以将 ch 移动到 31 位,这意味着 ch 是 32 位,但是怎么做呢?sizeof(ch) 也只有 1 个字节。

最佳答案

[...] that means ch is of 32 bits [...] ?

事实并非如此。 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.

关于c - unsigned char 的大小是 8 位,但为什么我可以将它(向左或向右)移动 31 位或最多 31 位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57124266/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com