整形提升和算数转换

简介: 整形提升和算数转换

c的整形算数运算总是至少以缺省整形类型的i精度来进行的。

为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转换为普通整形,这种转换称为整形提升。

我们常见的int实际上是signed int(有符号整形),另一种为unsigned int。

但是char类型到底是signed char还是unsigned char是不确定的,C语言标准没有明确指明,是取决于编译器的。在VS上,char==signed char。
image.png
5的二进制如上图,我们要把它赋给a,而a是字符型变量,所以从最小的位数开始取一个字节(8位)给a。b的情况同a。
image.png
a和b都是8位的,但他们要进行运算,因此我们需要先进行整形提升,然后才能相加。
image.png
又因为c也是字符型变量,所以对c也是取最小的8位,然后保存在内存中。如果我们想要打印出c的值,我们需要进行整形提升,然后从补码转换成原码。注意:因为c是signed char(有符号的char),因此高位补符号位1。
image.png
注意:整形提升时,如果是有符号的,高位要补符号位,如果是无符号的,高位直接补0.

例子2:

image.png
我们看到,只打印了c。

分析:a和b需要进行整形提升,但是c不需要整数提升。a和b整数提升后都变成了负数,表达式都为假,所以只打印了c。

例子3:
image.png
分析:c只要参与表达式运算,就会发生整形提升,表达式+c和-c都会发生整形提升,sizeof(+c)和sizeof(-c)都是4个字节,而sizeof(c)不发生整形提升,因此为1个字节。

算数转换

如果某个操作符的各个操作数属于不同类型,需要进行算数转换。就需要把其中一个操作数的转换为另一个操作数的类型,对于小于普通整形的数,我们会先进行整形提升。如果他们的类型大于等于普通整形int,就转换成精度更高的类型

目录
相关文章
|
2月前
|
存储 编译器 C语言
【表达式求值】整型提升和算术转换
【表达式求值】整型提升和算术转换
26 0
|
2月前
|
存储 C语言 C++
截断&&整型提升&&算数转换
截断&&整型提升&&算数转换
|
2月前
|
编译器 C语言
C语言中整数如何自动转换为浮点数
C语言中整数如何自动转换为浮点数
171 0
|
2月前
|
存储
算术表达式的转换
算术表达式的转换
|
10月前
|
C语言
C语言:截断+整型提升+算数转换练习
截断+整型提升+算数转换练习
45 0
|
7天前
|
存储 编译器 C语言
【C语言】:整型提升,算术转换与大小端的介绍
【C语言】:整型提升,算术转换与大小端的介绍
9 0
|
2月前
|
编译器
常用的算术转换
常用的算术转换
20 5
|
8月前
|
Linux C语言 C++
操作符&算数转换题
操作符&算数转换题
40 0
|
9月前
|
存储 人工智能 编译器
C语言之(有关%d和%u的有关内容,输出方法)(有符号和无符号在内存中的存储情况)(整形无符号数和有符号数是如何进行计算的,整形无符号数和有符号数在循环中的应用举例)
C语言之(有关%d和%u的有关内容,输出方法)(有符号和无符号在内存中的存储情况)(整形无符号数和有符号数是如何进行计算的,整形无符号数和有符号数在循环中的应用举例)
306 0
|
10月前
|
存储 编译器 C语言
C语言(二) 补码,运算值与表达式
C语言(二) 补码,运算值与表达式
122 0