隐式转换和强制转换

#include <stdio.h>

int main(void) {
  /*
   * 隐式转换:
   * 取值范围:char < short < int < long < long long < float < double
   * 在不同的数据类型进行计算、赋值等操作,会触发隐式转换
   * 转换规则1:
   *     取值范围小的,和取值范围大的进行计算,小的会先提升为大的,在进行计算
   * 转换规则2:
   *     char short 类型的数据在运算的时候,都会直接先提升为 int,然后在进行计算
   * 字符相加时,字符跟数字进行转换的时候会查询 ASCII 码表
   * */

  /*
   * 强制转换:
   * 取值范围:char < short < int < long < long long < float < double
   * 当需要将大的值赋值给小的值时,需要强制转换
   * 格式:想要转成什么类型,就在前面的小括号中写什么类型即可
   *     如:short i = (short)b;
   * 强制转换的弊端:
   *     有可能导致数据错误
   * !!!强制转换需要自己手动书写!!!
   * */
  
  short a = 10;
  short b = 20;
  short d = (short)(a + b); // short 在计算时自动转换为 int 类型
  // short d = (short)a + b; // 此时,只有 a 的类型被强制转换,而 b 还是 int 类型

  short i = 1;
  int j = 2;
  long k = 3;

  long long o = i + j + k;
  // 最后的类型是 long long, 具体的过程是:
  // short 先转换为 int, 然后和 int 类型的 j 相运算,结果还是 int
  // int 类型的结果和 long 类型的 k 相运算,结果是 long 类型
  // long 类型的结果被赋值给 long long 类型的 o ,被“隐式转换”为 long long 类型
  
  
  return 0;
}

posted @ 2026-01-08 17:40  Zhuye_inking  阅读(27)  评论(0)    收藏  举报