#include<stdio.h>
int main()
{
unsigned char c =292;
printf("%d\n",c);
return 0;
}
以下代码给出了输出&#34; 36&#34;。 我想知道为什么会这样?
答案 0 :(得分:4)
因为292不适合unsigned char
类型的变量。
我建议你编译这个程序:
#include <stdio.h>
#include <limits.h>
int main()
{
unsigned char c =292;
printf("%d %d\n", c, UCHAR_MAX);
return 0;
}
并检查输出:
prog.c: In function 'main':
prog.c:5:21: warning: unsigned conversion from 'int' to 'unsigned char' changes value from '292' to '36' [-Woverflow]
unsigned char c =292;
^~~
36 255
因此,我系统中的UCHAR_MAX
为255,这是您可以分配给c
的最大值。
292只是溢出c
,因为它是无符号类型,它从0到255,因此它会回绕,给你292 - (255 + 1)= 36。
答案 1 :(得分:1)
char data_type的大小为1个字节,范围为0到255。 但这里初始化超过255(即c = 292> 255)
因此,c存储(292-255)值(即第37个值)和值c存储为36(因为0是第一个值)。
这意味着您已初始化 c = 36。
最后,printf()函数。从内存中获取值并打印值36。
答案 2 :(得分:0)
将292转换为二进制时,将得到0001 0010 0100(9位)。 但不幸的是,一个字符变量只能存储1个字节(8位)。 因此,它将占用最后8位。即:0010 0100,等于十进制的36。 希望对您有帮助