256如何存储在char变量和unsigned char中

Siv*_*nan 4 c c++ memory bits char

多达255个,我能理解整数如何被存储在charunsigned char;

#include<stdio.h>
int main()
{
        unsigned char a = 256;
        printf("%d\n",a);
        return(0);
}
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,对于unsigned charchar,我的输出为0.

对于256我认为这是整数存储在代码中的方式(这只是猜测):

第一个256转换为二进制表示,即100000000(总共9位).

然后他们删除删除最左边的位(设置的位),因为char数据类型只有8位内存.

因此它在内存中存储为00000000,这就是为什么它的打印0作为输出.

猜测是否正确或有任何其他解释?

Mik*_*our 12

你的猜测是正确的.转换为无符号类型使用模运算:如果该值超出范围(太大或负),则以2 N为模减少,其中N是目标类型中的位数.因此,如果(通常情况下)char具有8位,则该值以256为模减少,因此256变为零.

请注意,没有此类规则可转换为签名类型 - 超出范围的值会提供实现定义的结果.另请注意,char未指定具有正好8位,并且在较不主流的平台上可以更大.

  • 可以更大,但我认为最小尺寸是 8 位。 (2认同)
  • 是的,ISO C 声明`UCHAR_MAX` 是_至少_ 255。逻辑上这意味着8 位。 (2认同)