C的char溢出

一、程序片段

    char a = (unsigned short) 200;
    printf("%d\n", a);
    char b =  200;
    printf("%d\n", b);

输出

-56
-56

二、结果解释

char分配的是一字节无符号整数,范围通常是 -128 到 127。
赋予200时,首位1被解释为符号位。
于是我们得到一个数的补码为:

1 100 1000

它的反码:

1 100 0111

得到原码:

1 011 1000

计算即得到-56

在 C 语言中,char 类型是一个有符号字符类型,范围通常是 -128 到 127。当你给 char 类型的变量赋予一个超出其表示范围的值时,它可能会发生溢出。

在你的代码中,将整数 200 赋值给 char 类型的变量 b,这个值超过了 char 类型的范围。根据有符号整数的溢出规则,当赋给有符号类型的变量一个超过其表示范围的值时,结果是未定义的。

因此,对于这种情况,输出的结果是不确定的,可能会因编译器实现而异。它可能输出 -56,这是因为 200 被解释为一个溢出的有符号 char 值,也可能输出其他的值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值