当前位置:   article > 正文

【C语言】第四天笔记总结_c语言0b100的用途和作用及使用场景

c语言0b100的用途和作用及使用场景

第四天(位运算符

1.位运算符介绍

进行位运算的时候要将数据转成二进制补码,进行运算

&:按位与

|:按位或

^:按位异或

~:按位取反

<<:按位左移

>>:按位右移

2.按位与

符号:&

格式:数据1  & 数据2

规则:将数据转成二进制补码,按照低位对齐,对不齐前面补0。

 "全1为1,有0则0"

应用场景:将一个数据的某一位或者某几位置0(第几位置0或者置1要从最低位作为第0位开始数)

例:将1位置0

0000 1010

& 1111 1101 --- 置0需要提供的数据

    0000 1000

总结规律:

a、如果想将一个数据的第n位置0,只需要将数据 &(第n位是0其他位都是1的数)

b、如果想将一个数据的第n位和第n+1位置0,只需要将数据 &(第n位和第n+1位是0其他位都是1的数)

3.按位或

符号:|

格式:数据1  |  数据2

规则:将数据转成二进制补码,按照低位对齐,对不齐前面补0。

有1则1,全0为0

应用场景:将一个数据的某一位或者某几位置1

总结规律:a、如果想将一位数的第n位置1,只需要将数据 |(第n位是1,其他位都是0的数)

b、如果想将一位数的第n位和第n+1位置1,只需要将数据 |(第n位和第n+1位是1其他位都是0的数)

4.按位异或

符号:^

格式:数据1 ^ 数据2

规则:将数据转成二进制补码,按照低位对齐,对不齐前面补0。

不同为1,相同为0

例:10 ^ 25

0000 1010

0001 1001

^  0001 0011  --- 19

5.按位取反

符号:~

格式:~数据

规则:将数据转成二进制补码,按照低位对齐,对不齐前面补0。

“所以位0变1,1变0”

例:

char a=7;  ~a

0000 0111

~ 1111 1000

unsigned char d = ~a; // 1111 1000   248

char e = ~a;         // 1111 1000   -8

6.按位左移

符号:<<

格式:数据 << 位数

规则:将数据转成二进制补码,所有位整体左移,低位补0,高位溢出舍弃。

应用场景:可以将1放在任意位置

例:

1<<0==0b1

1<<1==0b10

1<<2==0b100

...

相邻的两位置1

0b11 << 0  == 0b11    ---- 3 << 0

0b11 << 1  == 0b110   ---- 3 << 1

0b11 << 2  == 0b1100  ---- 3 << 2

7.按位右移

符号:>>

格式:数据>>位数

规则:将数据转成二进制补码,所有位整体右移,低位溢出舍弃,高位补符号位上的数据。

应用场景:

一般用于数据分割

int a = 0x12345678;

unsigned char ch1 = a;       //ch1 == 0x78

unsigned char ch2 = a >> 8;  // ch2 == 0x56

8.总结位运算的公式

前提:第几位置0或者置1要从最低位作为第0位开始数

8.1、将a的第n位置1,公式:a |=(1<<n);

8.2、将a的第n位和第n+1位同时置1,公式:a |=(3<<n);

8.3、将a的第n位置0,公式:a &=~(1<<n);

8.4、将a的第n位和第n+1位同时置0,公式:a &=~(3<<n);

8.5、判断a的第n位是0还是1,公式:a & (1<<n)看结果,如果结果不等于0,第n位是1,否则第n位是0;

8.6、将a的第n+1位和第n位置01或者10

先清00                a &=~(3<<n);

再重置01或者10       a |=(1<<n); 或者 a |=(2<<n);

8.7、将a的第n位0变1,1变0

a ^=(1<<n);

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小舞很执着/article/detail/919922
推荐阅读
相关标签
  

闽ICP备14008679号