欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > C语言学习day17-----位运算

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

2025/6/20 8:26:50 来源:https://blog.csdn.net/m0_62035519/article/details/148755902  浏览:    关键词:C语言学习day17-----位运算

目录

1.位运算

1.1基础知识

1.1.1定义

1.1.2用途

1.1.3软件控制硬件

1.2运算符

1.2.1与 &

1.2.2或 |

1.2.3非 ~

1.2.4异或 ^

1.2.5左移 <<

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)代码实现

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词