溢出char转换为int转换

时间:2016-12-28 14:59:23

标签: c

#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。 任何人都可以解释如何

5 个答案:

答案 0 :(得分:5)

256对于您计算机上的char类型来说太大了。

所以根据C标准(来自N1570,强调我的标准)它包含到最小值0

  

6.3.1.3有符号和无符号整数

     

1当整数类型的值转换为_Bool以外的另一个整数类型时,如果是该值   可以用新类型表示,它没有变化。

     

2否则,如果   新类型是无符号的,通过重复添加转换值   或减去一个可以表示的最大值   在新类型中,直到值在新类型的范围内。 60)

     

3   否则,新类型将被签名,并且无法表示该值   在里面; 结果是实现定义的或者   实现定义的信号被提出。

256字面值为intchar是一个有符号或无符号的整数类型,因此会出现上述强调行为之一。

答案 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的最大范围是127256的值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;
               ^