c++ enum 给定类型_详细解答C中的整数

一些数据类型,例如char,short int所占用的字节数少于int,当对它们执行操作时,这些数据类型会自动提升为int或unsigned int。这称为整数提升。例如,在较小的类型(如char,short和enum)上不会进行算术计算。首先将它们转换为int或unsigned int,然后对它们进行算术运算。如果int可以表示原始类型的所有值,则该值将转换为int。否则,它将转换为无符号整数。

69ca749682e37fa58cc2a99e670f9095.png

例如,请参见以下程序。

#include   int main() {     char a = 30, b = 40, c = 10;     char d = (a * b) / c;     printf ("%d ", d);      return 0; }

输出:

120

乍看之下,表达式(a * b)/ c似乎引起算术溢出,因为带符号的字符只能具有-128至127的值(在大多数C编译器中),而子表达式的值'(a * b) '是1200,大于128。但是整数提升是在char类型进行算术运算时发生的,我们得到了适当的结果而没有任何溢出。

考虑下面的程序作为另一个示例

#include    int main() {     char a = 0xfb;     unsigned char b = 0xfb;       printf("a = %c", a);     printf("b = %c", b);       if (a == b)       printf("Same");     else      printf("Not Same");     return 0; }当我们打印“ a”和“ b”时,将打印相同的字符,但是当我们比较它们时,我们得到的输出为“不相同”。'a'和'b'与char具有相同的二进制表示形式。但是,当对“ a”和“ b”执行比较操作时,它们首先被转换为int。'a'是一个有符号的char,当将其转换为int时,其值变为-5(有符号的值0xfb)。'b'是无符号char,当将其转换为int时,其值变为251。值-5和251具有不同的int表示形式,因此我们得到的输出为“ Not Same”。当我们打印“ a”和“ b”时,将打印相同的字符,但是当我们比较它们时,我们得到的输出为“不相同”。'a'和'b'与char具有相同的二进制表示形式。但是,当对“ a”和“ b”执行比较操作时,它们首先被转换为int。'a'是一个有符号的char,当将其转换为int时,其值变为-5(有符号的值0xfb)。'b'是无符号char,当将其转换为int时,其值变为251。值-5和251具有不同的int表示形式,因此我们得到的输出为“ Not Same”。

当我们打印“ a”和“ b”时,将打印相同的字符,但是当我们比较它们时,我们得到的输出为“不相同”。
'a'和'b'与char具有相同的二进制表示形式。但是,当对“ a”和“ b”执行比较操作时,它们首先被转换为int。'a'是一个有符号的char,当将其转换为int时,其值变为-5(有符号的值0xfb)。'b'是无符号char,当将其转换为int时,其值变为251。值-5和251具有不同的int表示形式,因此我们得到的输出为“ Not Same”。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值