当前位置: 首页 > news >正文

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

相关文章:

  • LeeCode94二叉树的中序遍历
  • SpringBoot定时监控数据库状态
  • thinkphp8 模型-一对一,一对多,多对多 学习
  • 软件工程(期末复习班)
  • .NET 的配置系统
  • CLion + STM32环境配置,亲测有效(2025.06.19记)
  • 磐基PaaS平台MongoDB组件SSPL许可证风险与合规性分析(上)
  • 业务战略分析需要开展什么工作?-中小企实战运营和营销工作室博客
  • Windows 操作系统 - Windows 关闭咨询和兴趣
  • FocalAD论文阅读
  • 【目标检测】非极大值抑制(NMS)的原理与实现
  • 运维人员常用网站列表
  • 【LUT技术专题】采样间隔自适应3DLUT-AdaInt
  • 31.多列子查询
  • 动态规划:01 背包(闫氏DP分析法)
  • pyspark 处理字符串函数
  • 实现PDF文件添加水印的功能
  • 机器学习×第十二卷:回归树与剪枝策略——她剪去多余的分支,只保留想靠近你的那一层
  • Ubuntu最新版本(Ubuntu22.04LTS)安装nfs服务器
  • DeserializationViewer使用说明
  • 做二手房的网站技巧/怎样做好网络营销推广
  • 东莞网站建设工作室/一呼百应推广平台
  • 多语种网站建设/广州网络营销的推广
  • 织梦做仿站时 为何会发生本地地址跳转网站地址/北京网站seo服务
  • h5做的网站/网站设计模板网站
  • 云南省昆明市做网站的公司/优化设计官方电子版