嵌入式C之位操作符

二进制数据的求取: 除2取余法

 13的二进制

13 2 = 6... 1

6 ➗ 2 = 3... 0  

3 ➗ 2 = 1... 1  

1 2 = 0... 1  ⬆️

结果是从下向上:  1101

一、左移运算符(<<)

左移位规则:

左边抛弃、右边补0

结果为原数乘以2的移位位数次方(如果最前面符号位是0才是2的倍数,0代表正数)

二、位操作符

位操作符用于对二进制数操作

按位取反~ 是单目运算符,优先级别比其余三个高

操作符

解释说明

按位与:&

对两个二进制对应位都为1时,结果为1,否则为0

|按位或:|

对两个二进制对应位只要有一个为1时,结果为1,否则为0

按位取反:~

对一个二进制数的每一位进行取反操作,将0变为1,将1变为0

按位异或:^

对两个二进制数的每一位进行异或操作,当两个对应位不相同时,结果为1,否则为0。

补码

按位取反(~):
int a = 3; 
int b = ~a; 

b的值应该这样去算:

C语言中int 类型值是有符号整数,用补码表示,补码最前面的符号位: 0表示正数,1表示负数

正数的补码是本身,负数的补码是正数取反,符号位保持不变加1的表示

备注: b的值~3是补码,符号位是1,是负数,需要取到原码得到结果,原本从补码到原码,是减1再取反,实际与取反再加1是等价的。 而且如果100 -1 = 011,0找前面借了1位后是2,最后借到1时,1-1 = 0

异或操作:

a^b^b = a;  对一个数做两次异或运算最后会得到它自己(其中原理是: 0^b = b本身,1^b=b反位)

三、其它操作符

逗号表达式: 依次计算每个表达式,并返回最后一个表达式的值作为整个表达式的值。

int a = 1, b = 2, c = 3;
    int d = (a++, b++, ++c, a + b + c);  
    printf("a=%d\n",a);//a=2
    printf("b=%d\n",b);//b=3
    printf("c=%d\n",c);//c=4
    printf("d=%d\n",d);//d=9

操作符优先级:

优先级

操作符

解释

1

()[]->.

括号、数组、两种结构成员访问

2

!~++--+-*&、(类型)、sizeof

否定、按位取反、自增、自减、正号、负号、间接访问、地址访问、类型转换、内存大小

3

* /%

乘、除、取余

4

‘+-

加、减

5

<<>>

左移、右移

6

<<=>=>

小于、小于等于、大于等于、大于

7

==!=

等于、不等于

8

&

按位与

9

^

按位异或

10

按位或

11

&&

逻辑与

12

||

逻辑或

13

?::

条件操作符

14

‘=+=-=*=/=%=

赋值、加等、减等、乘等、除等、取模等

15

逗号运算

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值