C语言的表达式求值【1字节=8比特】

本文介绍了C语言中表达式求值的过程,重点关注整型提升和算数转换。整型提升确保所有小于int类型的整型值在运算前转化为int或unsigned int,遵循符号位填充规则。算数转换则规定不同类型的运算数向字节长度大的类型转换,以确保运算的正确性。理解这些规则对于C语言编程至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 求值的顺序一部分是由操作符的优先级和结合顺序决定的   而另一部分,也可能要进行其他类型的转换

1 隐式类型转换

整型提升

定义:c语言的整型算数运算,总是至少以缺省整型类型的精度来进行的,为了获得这个精度,表达式中的字符和短整型操作数 在使用之前被转化为普通的整型,这就叫整型提升(就是把字符和短整型操作数来进行普通类型的转化)

意义:表达式的整型运算在CPU的相应运算器件内执行,CPU内整型运算器(ALU)的操作数的字节长度,一般是int的字节长度,因此即使是两个char类型的相加,在CPU上运行时也是转化为操作数的标准字节的长度         所以表达式中,所有小于int长度的整型值(如char 类型short类型),必须先转化为int  或unsigned int   的类型  之后才能送到CPU中去进行运算

char a,b,c;

...............

算 a = b + c;      运算时就是要把b和c的类型换成整数型,之后再去付给a  a没有整型提升,所以a是1个字节 ,b   c 进行了整型提升,是4个字节,多出来了3个,就去把多的3个截断

整型提升是按照变量的数据类型的符号位来提升的 

一个字节转换为四个字节的时候  一个字节前补的位是数据类型的符号位来补充的,符号位是什么 就补充什么

没有符号位的  高位都补0

#include<stdio.h>
int main()
{
	char a = 3;
//  00000000 00000000 00000000 00000011      这个是整数类型的 4个字节
//  00000011                                 这个是字符类型的 1个字节 
	char b = 127;
//  00000000 00000000 00000000 01111111
//  01111111 
	char c = a + b;
//	00000000 00000000 00000000 00000011   
//	00000000 00000000 00000000 01111111
//  00000000 00000000 00000000 10000110	   最后的c是char的类型  所以要的是八个比特位  
	printf("%d",c);//10000110    -126 
	return 0;
}

补码进行运算  计算机内都是以补码的形式存储的

如果对C进行整型提升 

11111111 11111111 11111111 10000110 补码

11111111 11111111 11111111 10000001 反码

1000000 0000000 0000000  011111110 原码

2  算数转换

如果一个操作符的各个操作数,属于不同的转换类型,除非操作数是同一种类型 ,要不然是不进行运算的  向字节长的去转换

操作符的属性

1 操作符的优先级(优先级是另一篇博客上的)

2 操作符的结合性

3 是否控制求值顺序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值