当前位置: 首页 > news >正文

深入理解C语言中的整形提升与算术转换

深入理解C语言中的整形提升与算术转换

一.整形提升:概念与原理

在C语言中,整形提升(Integer Promotion)是一个重要但容易被忽视的概念。它指的是在表达式中,任何小于int类型的整型(如charshort)操作数在使用前都会被自动转换为普通整型int

1.为什么需要整形提升?

  1. 硬件效率考虑:CPU的整型运算器通常以int长度为标准操作数长度,使用标准长度可以提高运算效率

  2. 精度保持:防止在运算过程中意外丢失数据精度

2.整形提升规则

整形提升按照变量的数据类型的符号位进行:

  • 有符号类型:高位补符号位

  • 无符号类型:高位补0

3.整形提升实例分析

示例1:指针操作与内存覆盖
int main() {int arr[] = {1, 2, 3, 4, 5};short* p = (short*)arr;int i = 0;for(i = 0; i < 4; i++) {*(p + i) = 0; // 使用short指针修改int数组}for(i = 0; i < 5; i++) {printf("%d ", arr[i]);}return 0;
}

分析

  1. arr是一个包含5个int的数组

  2. short* p指向arr的首地址

  3. 循环中将前4个short位置设为0

  4. 由于int通常是4字节,short是2字节,所以前两个int被完全置为0

  5. 输出结果将是:0 0 3 4 5

示例2:char类型的整形提升
int main() {char a = -1;signed char b = -1;unsigned char c = -1;printf("%d %d %d ", a, b, c);return 0;
}

分析

  1. ab都是有符号char,值为-1(内存表示:0xFF)

  2. c是无符号char,赋值-1会转换为255(0xFF)

  3. 当用%d打印时,发生整形提升:

    • ab:符号扩展为0xFFFFFFFF(即-1)

    • c:零扩展为0x000000FF(即255)

  4. 输出结果:-1 -1 255

二.算术转换规则

当表达式中存在不同类型的操作数时,C语言会进行自动类型转换(称为"算术转换"),规则如下:

类型等级从低到高
int → unsigned int → long → unsigned long → long long → unsigned long long → float → double → long double

http://www.dtcms.com/a/168009.html

相关文章:

  • 【业务领域】PCIE协议理解
  • LintCode第652题-递归版
  • 1996-2022年全国31省ZF干预度数据/财政干预度数据(含原始数据+计算过程+结果)
  • 算法笔记.试除法判断质数
  • 网络编程——TCP和UDP详细讲解
  • Adam(Adaptive Moment Estimation)
  • Python数据分析课程实验-2
  • 前端八股 5
  • Gen6D代码框架分析
  • Linux——线程(3)线程同步
  • Elsevier latex报错Paragraph ended before \@citex was complete.<to be read again>
  • Pinia: vue3状态管理
  • 【Android】四大组件
  • Mem0.ai研究团队开发的全新记忆架构系统“Mem0”正式发布
  • 2025年人工智能火爆技术总结
  • 【Linux网络】I/O多路转接技术 - epoll
  • epoll函数
  • 【Shell 脚本编程】详细指南:第四章 - 循环结构(for、while、until) 深度解析
  • 60常用控件_QSpinBox的使用
  • 排序算法——冒泡排序
  • C语言学习之动态内存的管理
  • 交我算使用保姆教程:在计算中心利用singularity容器训练深度学习模型
  • caffe适配cudnn9.6.0(ai修改代码踩坑)
  • synchronized与Lock深度对比
  • 随机森林实战:从原理到垃圾邮件分类
  • Windows下Python3脚本传到Linux下./example.py执行失败
  • AdaBoost算法详解:原理、实现与应用指南
  • 极简GIT使用
  • 补4月30日
  • 常见电源的解释说明