手记

【备战春招】第九天位运算符

课程内容:

关系运算符

类型与含义

运算符 含义

大于条件成立的时候,运算的结果为真

= 大于或等于条件成立的时候,运算的结果为真

< 小于条件成立的时候,运算的结果为真

<= 小于或等于条件成立的时候,运算的结果为真

== 等于条件成立的时候,运算的结果为真

!= 不等于条件成立的时候,运算的结果为真

用法说明

(1)C语言中规定,关系表达式值只有两个 0 (假)和 1 (真)。

(2)=和== 不同, =表示赋值操作,==表示逻辑判断是否相等。

(3)一般C语言中定义,0为假,非0为真。

个人理解

关系运算符一般是用在两边条件关系对比的时候,结果也都是布尔值,对比条件成立或者不成立

逻辑运算符

与或非

逻辑与 &&

表达式1 && 表达式2

规则:

都真则真 一假则假

短路特性:表达式1为假,则不会执行表达式2

示例

int a = 10,b = 20;

int ret = a > b && a;

逻辑或 ||

表达式1 || 表达式2

规则:

都假则假 一真则真

短路特性:表达式1为真,则不会执行表达式2

示例

int a = 10,b = 20;

int ret = a > b || a;

逻辑非 !

规则:(假->真,真->假)

位运算符

运算符介绍

运算符&

格式

表达式1 & 表达式2

功能

按位与

结果

1 按位与1 结果是1 1 按位与0 结果是0 0按位与0 结果是0 速记:都1则1,1零则0

示例

			        unsigned char reg1 = 0x13;
    char reg2 = -1;  原: 1000 0001 
                             反: 1111 1110 
                             补: 1111 1111
    unsigned char reg2 = 0x78;
    unsigned char data = 0;


    0001 0011 
    &1111 1111 
    0001 0011 ===>0x13




     0001 0011
    & 0111 1000
     0001 0000 ===>0x10
    data = reg1 & reg2;
    printf("data = %#x\n",data); //0x10

运算符 |

格式

表达式1 | 表达式2

功能

按位与

结果

1 按位与1 结果是1 1 按位与0 结果是0 0按位与0 结果是0 速记:都1则1,1零则0

示例

0001 0011

| 0111 1000

0111 1011 ===>0x7b

示例都是二进制按照功能结果推出来的

运算符 ^

格式

表达式1 ^ 表达式2

功能

按位异或

结果

1 变成0, 0变成1

运算符 ~

格式

~表达式

功能

按位取反

结果

1 变成0, 0变成1

运算符 >>

格式

表达式<< 位数

功能

左移

结果

无论是正数还是负数,左移都是对应的二进制位向左移动高位丢弃,低位补0 左移的时候,等价于将这个数据乘以2的n(移动的位)次方

运算符 <<

格式

表达式>> 位数

功能

右移

结果

无符号数据

逻辑右移(针对无符号数据) 对应的是正数和0,逻辑右移是对应的二进制位向右移动,低位丢弃,高位补0。

有符号数据

正数

算术右移(针对有符号数据): 若是数据为正数,算术右移是对应的二进制位向右移动,低位丢弃,高位补0。

负数

若是数据为负数,算术右移是对应的二进制位向右移动,低位丢弃,高位补1。 速记: 右移,向右移动,低位丢弃,高位正数补0,负数补1

学习收获:

这节课程下来了解到了位运算符

右移运算符有个坑 分正负数 以后遇到了要小心点

截图打卡:

0人推荐
随时随地看视频
慕课网APP