char/short/int/long/float/double之间的隐式类型转换规则

在C和C++编程语言中,隐式类型转换(也称为自动类型转换)是编译器在没有显式指示的情况下自动进行的类型转换。以下是char、short、int、long、float和double之间的隐式类型转换规则的详细说明:

整数类型之间的隐式转换

  1. char和short转换为int

    • 当char或short参与到需要int的表达式中时,它们会被自动转换为int。这包括所有的算术运算、比较运算等。
    • 例如:
      char c = 'A'; short s = 123; int result = c + s; // c和s都被提升为int
      
  2. int转换为long

    • 当int值与long类型的值参与运算或被赋值给long类型变量时,int会自动转换为long。
    • 例如:

      int i = 1000; long l = i; // i被提升为long

  3. char、short、int转换为long long

    • 类似于int转换为long,当char、short或int与long long类型的值参与运算或被赋值给long long类型变量时,它们会自动转换为long long。
    • 例如:

      int i = 1000; long long ll = i; // i被提升为long long

整数类型与浮点类型之间的隐式转换

  1. 整数类型转换为float

    • 当任何整数类型(char、short、int、long、long long)与float类型的值参与运算或被赋值给float类型变量时,它们会自动转换为float。
    • 例如:

      int i = 1000; float f = i; // i被提升为float

  2. float转换为double

    • 当float值与double类型的值参与运算或被赋值给double类型变量时,float会自动转换为double。
    • 例如:

      float f = 3.14f; double d = f; // f被提升为double

  3. 整数类型转换为double

    • 当任何整数类型(char、short、int、long、long long)与double类型的值参与运算或被赋值给double类型变量时,它们会自动转换为double。
    • 例如:

      int i = 1000; double d = i; // i被提升为double

特别注意事项

  • 无符号类型转换

    • 当无符号类型与有符号类型一起使用时,如果无符号类型的范围更大,则有符号类型会转换为无符号类型。例如,unsigned intint一起使用时,如果unsigned int的范围更大,则int会转换为unsigned int
    • 示例:

      #include <stdio.h>
      
      int main() {
          unsigned int u = 3000000000; // 超过了int的最大值
          int i = -1;
      
          if (i < u) {
              printf("i小于u\n");
          } else {
              printf("i不小于u\n");
          }
      
          return 0;
      }
      

      在这个例子中,i会被转换为unsigned int,所以i的值实际上变成了一个很大的正数(因为-1unsigned int中表示为非常大的正数),因此i不会小于u,程序输出"i不小于u"。

  • 提升规则

    • 小于int的整型(如char、short)在算术运算中通常会提升为int。
    • 在混合类型运算中,类型较小的操作数通常会被提升为类型较大的操作数,以防止数据丢失。
    • 示例:
      #include <stdio.h>
      
      int main() {
          char c = 10;
          short s = 20;
          int result = c + s; // c和s都会提升为int
      
          printf("结果是:%d\n", result);
      
          return 0;
      }
      
      在这个例子中,cs都被提升为int,然后进行加法运算,所以结果是30
  • 浮点类型与整数类型的混合

    • 当浮点类型与整数类型混合使用时,整数类型通常会转换为浮点类型。例如,一个int与一个float相加,int会被转换为float,然后进行加法运算。
    • 示例:
      #include <stdio.h>
      
      int main() {
          int i = 10;
          float f = 5.5;
      
          float result = i + f; // i会被转换为float,然后进行加法运算
      
          printf("结果是:%f\n", result);
      
          return 0;
      }
      

      在这个例子中,i被转换为float,然后与f相加,所以结果是15.5

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值