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

    xiaoxiao2022-12-07  53

    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 参与算术逻辑运算
    最新回复(0)