## C语言(三、运算符和表达式) 基础不牢地动山摇!!!

本文围绕C语言的运算符和表达式展开。介绍了逻辑运算、位移操作符、逻辑反、强制类型转化等内容,如逻辑运算在CPU中完成,位移操作符有左移和右移规则;还讲解了逻辑与、按位与、逗号表达式等,以及变量的左值右值、整型提升等概念。

1、 逻辑运算需要先将数据从内存加载到cpu,在cpu中完成算术逻辑运算。只有重新再写回内存时,才会改变原数据

int a = 10;

a+10; // 不改变a的大小

a<<1 // 不改变a的大小

2、位移操作符

左移相当于 *2
右移相当于 /2

左移操作符 <<

规则:左边抛弃,右边补0

右移操作符 >>

规则:
(1)逻辑移位,左补0,右丢弃(一般是无符号数)
(2)算术移位,左用原该值的符号位填充,右丢弃(有符号数)

移位时,不能移动负数位。
如 x >>-1 , 错误

3、逻辑反 !

若操作数值为0, ! 运算结果为1( 逻辑真 );
若操作数值为非0, ! 的运算结果为 0 。

c语言中,没有布尔类型 , 只有 0 表示真,!0 表示假。
逻辑反!,不是按位反
按位取反是: ~

4、强制类型转化

强制类型转化不改变转化目标的内容。

int a = 9;

float b = (float)a ; a的内容不变,只有通过赋值,才会改变。

5、逻辑与 && 按位与&

&& 对于多个表达式而言
&  对于二进制bit位

&& 在判断多个表达式时,第一个表达时若为假,就会出现逻辑短路,就不会对后面的表达式判断及执行

||在判断多个表达式时,第一个表达时若为真,就会出现逻辑短路,就不会对后面的表达式判断及执行

逻辑表达式的优先级

	优先级顺序为 ! ——>  &&  ——>   ||
 ! 高于算术运算符,&& 和 || 低于 关系运算符

例题:
#include<stdio.h>

int main( )
{
int i = 0,a = 0,b = 2,c = 3,d = 4;

i = a++ && ++b && d++; // 先判断a为0,则短路。++b && d++不被判断和执行
//i = a++ || ++b ||d++; // a = 1   b = 3 判断逻辑真 得出结果后 短路  d不执行 

printf("%d%d%d%d",a,b,c,d); // 执行结果1 2 3 4 

return 0;

}

6、逗号表达式

逗号表达式,从右到左一次执行。整个表达式的结果是最后一个表达式的结果。
int a = 1;
int b = 2;
int c = ( a>b,a=b+10,a,b=a+1); // c = 13

7、变量理解

对于一个变量,有开辟的 空间 和变量对应空间上的 内容

使用变量的空间 ----> 左值
使用变量的内容 ----> 右值

8、整型提升
判断数据是否进行整型提升,则需要看cpu相应的运算器是否执行该数据,即算术逻辑运算。
对于小于32个bit位的数据类型,在进行算术逻辑运算时,需要进行整型提升。

如何进行整型提升?
对于有符号数据类型,
根据数据的符号位,高位补充符号位。

对于无符号数据类型,
	高位直接补0.

例: char a , b , c ;

a = b + c;//显然要进行整型提升

例:
char c = 1;

printf("%u\n",sizeof(c)); // 1

printf("%u\n",sizeof(+c));//4  参与算术逻辑运算, 

printf("%u\n",sizeof(!c));//4  参与算术逻辑运算
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值