#include <stdio.h>
void func(int a);
int main() {
char ch = 256;
func(ch);
return 0;
}
void func(int a) {
printf("%d\n", a);
}
上述程序的输出为0
。
任何人都可以解释如何
答案 0 :(得分:5)
256
对于您计算机上的char
类型来说太大了。
所以根据C标准(来自N1570,强调我的标准)它包含到最小值0
:
6.3.1.3有符号和无符号整数
1当整数类型的值转换为
_Bool
以外的另一个整数类型时,如果是该值 可以用新类型表示,它没有变化。2否则,如果 新类型是无符号的,通过重复添加转换值 或减去一个可以表示的最大值 在新类型中,直到值在新类型的范围内。 60)
3 否则,新类型将被签名,并且无法表示该值 在里面; 结果是实现定义的或者 实现定义的信号被提出。
256
字面值为int
,char
是一个有符号或无符号的整数类型,因此会出现上述强调行为之一。
答案 1 :(得分:0)
因为字符集仅限于255个字符,所以输出为0
http://www.asciitable.com/包含完整的字符集详细信息列表,char仅限于256 unsigned char 1 byte - &gt; 0到255 signed char 1 byte - &gt; -128到127
答案 2 :(得分:0)
尝试以8位存储256 ...它获得全部1 [00000000]。所以基本上它溢出,只剩下0位。
#include <stdio.h>
void func(int a);
int main() {
char ch = 256;
printf("%c\n",ch); //nothing prints. That's what happens when
// when we print 'NUL'
func(ch);
return 0;
}
void func(int a) {
printf("%d\n", a);
}
答案 3 :(得分:0)
char
的最大范围是127
。 256
的值129
超过127
,当我们将1
添加到127
时(这是char的最大值),它会转到最小值{{ 1}}。因此,如果我们将-128
添加到129
,则会生成127
。
表示char 127 + 1 = -128。 127 + 129 = 0
因此,对于以下程序,输出为1。
0
答案 4 :(得分:0)
如果用gcc编译它,它实际上告诉你原因:
testo.c: In function ‘main’:
testo.c:6:15: warning: overflow in implicit constant conversion [-Woverflow]
char ch = 256;
^