C语言学习day17-----位运算

目录

1.位运算

1.1基础知识

1.1.1定义

1.1.2用途

1.1.3软件控制硬件

1.2运算符

[1.2.1与 &](#1.2.1与 &)

[1.2.2或 |](#1.2.2或 |)

[1.2.3非 ~](#1.2.3非 ~)

[1.2.4异或 ^](#1.2.4异或 ^)

[1.2.5左移 <<](#1.2.5左移 <<)

[1.2.6右移 >>](#1.2.6右移 >>)

1.2.7代码实现

1.2.8置0

1.2.9置1

1.2.10不借助第三方变量,实现两个数的交换

1.2.11实现循环左移


1.位运算

1.1基础知识

1.1.1定义

二进制位上的运算

1.1.2用途

1)系统软件开发

2)硬件操作控制

3)加密解密

1.1.3软件控制硬件

通过软件实现对CPU相关寄存器中二进制位的控制,进而影响硬件上电平的高低变化

1.2运算符

1.2.1与 &

1)运算优先级:结合性

2)运算规则: 一假则假

3)示例

eg:

unsigned char a=0x55;

unsigned char b=0x33;

a&b

a=0x55------>0101 0101

b=0x33------>0011 0011

0101 0101 //a

& 0011 0011 //b


0001 0001 //0x11

1.2.2或 |

1)运算规则:一真则真

2)示例

eg:

unsigned char a=0x55;

unsigned char b=0x33;

a|b

a=0x55------>0101 0101

b=0x33------>0011 0011

0101 0101 //a

| 0011 0011 //b


0111 0111 //0x77

1.2.3非 ~

1)运算规则:真假相对

2)示例

eg:

unsigned char a=0x55;

unsigned char b=0x33;

a~b

a=0x55------>0101 0101

b=0x33------>0011 0011

~ 0101 0101 //a

1010 1010 //0xaa


~ 0011 0011 //b

1100 1100 //0xcc

1.2.4异或 ^

1)运算规则:相同为0,不同为1

2)示例

eg:

unsigned char a=0x55;

unsigned char b=0x33;

a&b

a=0x55------>0101 0101

b=0x33------>0011 0011

0101 0101 //a

^ 0011 0011 //b


0110 0110 //0x66

1.2.5左移 <<

1)运算规则:m<<n 表示将m中的二进制位向左移动n位,最右边空出来的位置补0

2)示例

eg:

unsigned char a=0x55;

a<<1

0101 0101 //a

01010 01010 //0xaa

3)注意

左移只是运算,并不影响运算数本身

1.2.6右移 >>

1)运算规则:m>>n 表示将m中的二进制位向右移动n位

2)示例

eg:

unsigned char a=0x55;

a>>1

0101 0101 //a

step1: 0101 0101 //最后一位丢失

step2: 0101 010

step2: 0010 1010 //0x2a

3)根据数据类型操作

右移要看左操作数的数据类型是否是有符号的

有符号的右移 signed------最高位补符号位 //算术右移

无符号的右移 unsign-------最高位补0

1.2.7代码实现

有符号与无符号----------->

打印结果--------->

1.2.8置0

1)操作

a & ~(1<<10) //第10位置0

2)代码实现

eg:第10位置0

eg:第3,5,7位置0

eg:偶数位置0

1.2.9置1

1)操作

a | (1<<10) //第10位置1

2)代码实现

eg:所有奇数位置1

1.2.10不借助第三方变量,实现两个数的交换

1)方法一

  • 使用方法:

a=a+b;

b=a-b;

a=a-b;

  • 代码实现:

2)方法二:异或

  • 使用方法:

a=a^b;

b=a^b;

a=a^b;

  • 代码实现:

3)两个方法区别

浮点型数据不能作位运算----即浮点型不能使用方法二

1.2.11实现循环左移

1)用法

a<<1

2)基本思路

a.先判断最高位是1还是

b.是1-------->左移

最低位+1

c.是0-------->直接左移

3)代码实现