C语言 整形提升与整形截断总结

本文详细介绍了C语言中的整形提升和整形截断。整形提升在运算时将小类型转换为int类型,而整形截断则是在赋值时取高位的一定位数。文章通过实例分析了两者的概念、意义及操作过程,特别是当两者并存时对程序行为的影响。
摘要由CSDN通过智能技术生成

一、整形提升

1、整形提升的定义

  首先c语言在进行算数运算时总是按整形类型来运算的,char a = 1;char b = 2; 在执行a + b时实际上时int 型的1和2在相加。这其中涉及这样一种转换,表达式中的字符(32位1字节)和短整型(32位2字节)操作数在使用之前被转化为普通整形,这种转换称为整形提升

2、整形提升的意义

  表达式的整形运算要在CPU的相应运算器件内执行,CPU内整形运算器(ALU)的操作数字节长度一般就是int型的字节长度,这也是CPU的通用寄存器的长度,因此,即使两个char类型相加,在CPU中执行时要先转化为CPU内整形操作数的标准长度。

3、怎样进行整形提升
  1. 对于有符号的类型
char a = 1;

此时a内存中的是以二进制0000 0001(符号位为0)存储的,如果此时要对a进行运算或者以%d形式打印,a将被提升为 00000000 00000000 00000000 00000001,在内存中用这种形式运算或者打印。

char b = -1;

b在内存中以补码形式存储为1111 1111(符号位为1),使用b运算或以%d形式打印时,会被提升为11111111 11111111 11111111 11111111;
总结:有符号数在整形提升时看符号位,是1补1是0就补0,补够一个int形的长度。

  1. 对于无符号数,在高位补0即可,补够一个int形的长度。

二、整形截断

1、整形截断概念

  在上面整形提升中我们举了两个例子比如: char a = 1;我的理解首先在C语言中任何直接出现的数字(比如等号右边的1)都是直接按int型处理的。int形的1怎样赋值给char类型的a呢?
  这里就涉及一个整形截断的问题,整形1在内存中存储为00000000 00000000 00000000 00000001 ;整形截断是

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值