位运算符讲解

简介: 位运算符讲解


目录

                                               与(&)

                                               或(|)

                                               非(~)

                                               异或(^)

                                               移位运算符

                                               1.>> 右移

                                                2.<<左移


 

最近接触了位运算符,我认为位运算符在一些题中的使用是很巧妙得,而且它也是算是一个入门算法。

位运算符有,与,或,非,异或,移位运算符

位运算符实际是采取二进制进行运算,

                                               与(&)

            两个二进制操作数对应位同为1 结果位 才为1,其余情况为0;

  10进制数        15            二进制    00001111

                         14                          00001110

15&14=  14(00001110)

 # include <stdio.h>
 int main()
 {
  printf("%d",14&15);
  return 0;
  }

 

                                               或(|)

                 两个二进制操作数对应位只要有一个为1 结果位 就为1,其余情况为0

10进制数        15            二进制    00001111

                       14                           00001110

15|14=15(00001111)

 # include <stdio.h>
 int main()
 {
  printf("%d",14|15);
  return 0;
  }

                                         非(~)

             一个二进制操作数,对应位为0,结果位为1;对应位为1,结果位为0;

取反后得到的是原码   而进行存储时是存储的补码,得到补码的过程要先得到反码

10进制数       8           二进制    0000 1000

     (~8)=-9(1000 1001)

  取反后原码:1111 0111

  取反后反码:1000 1000(除了符号位 其余位都进行取反操作)

  取反后补码:1000 1001  补码(因为为负数所以加一) 如果为正数不需要进行加一

           

 # include <stdio.h>
 int main()
 {
  printf("%d",~15);
  return 0;
  //00001000
  //11110111      取反原码
  //10001000      取反反码
  //10001001      补码(因为为负数所以加一)  
  }

 

                                                  异或(^)

           同为假,异为真

10进制数        15            二进制    00001111

                       14                           00001110

15^14=1(0000001)

 # include <stdio.h>
 int main()
 {
  printf("%d",14^15);
  return 0;
  }

 

                        移位运算符

1.>> 右移

按二进制形式把所有的数字向右移动对应位移位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1。(高位用符号位补充-------正数右移还是正数    负数右移还是负数)

语法:需要移位的数字number >> 移位的次数

13>>2=3

13的二进制位(1101)向右移动两位变成3(11)

性质(在整数下):右移相当于用该数除以2的移位次数再向下取整

13/(2^2)向下取整为3

2.<<左移

将一个数的二进制同时往左移位,低位用0补充

5<<1=10

5(101)向右移动1位 (1010)=10、

性质同上右移

是5*2^1=10

 

相关文章
|
域名解析 缓存 监控
ubuntu20.04上安装dnsmasq服务及dns缓存配置
ubuntu20.04 安装dnsmasq服务, 缓存dns,加快网络地址解析
3021 0
|
数据采集 缓存 Java
Python vs Java:爬虫任务中的效率比较
Python vs Java:爬虫任务中的效率比较
|
6月前
|
人工智能 自然语言处理 JavaScript
专为 Claude Code 设计的基于 YAML 的 Playwright MCP 自动化测试
YAML配置结合Claude Code与Playwright MCP,将自动化测试变得人人可用。通过简洁的YAML语法替代复杂的JavaScript代码,解决传统测试中冗长、硬编码和复用性差等问题。自然语言描述测试步骤,AI解析执行,支持多环境切换与智能报告生成,极大降低技术门槛,提升团队协作效率。无论是开发、QA还是产品经理,都能轻松参与测试流程,真正实现可读、易维护的自动化测试新范式。
1197 3
|
12月前
|
数据采集 人工智能 自然语言处理
Midscene.js:AI 驱动的 UI 自动化测试框架,支持自然语言交互,生成可视化报告
Midscene.js 是一款基于 AI 技术的 UI 自动化测试框架,通过自然语言交互简化测试流程,支持动作执行、数据查询和页面断言,提供可视化报告,适用于多种应用场景。
3043 1
Midscene.js:AI 驱动的 UI 自动化测试框架,支持自然语言交互,生成可视化报告
|
存储 数据可视化 Java
使用Java实现可视化数据分析平台
使用Java实现可视化数据分析平台
|
Java 数据安全/隐私保护
JAVA AES加密解密工具类
JAVA AES加密解密工具类
1428 0
|
XML 数据库 数据格式
TinyXml快速入门(一)
作者:朱金灿 来源:http://blog.csdn.net/clever101 对于xml文件,目前我的工作只是集中在配置文件和作为简单的信息文件来用,因此我不太喜欢使用msxml这种重量级的xml解析器,特别是使用msxml解析xml涉及到复杂的com类型转换,更是令人感觉繁琐。
1121 0
|
人工智能 C语言
c语言:初步实现扫雷游戏
c语言:初步实现扫雷游戏
150 0
|
Web App开发 传感器 移动开发
sublime和vscode比较
主流前端开发编辑器 体积小,运行快,启动快 文本功能强大 支持编译,且可以在控制台看到输出 可安装大量插件,来满足定制化需求(ctrl+shift+p,ip,搜索插件安装) 轻量级,使用小项目
1516 0
sublime和vscode比较
|
XML Oracle Java
Flowable工作流入门看这篇就够了
Flowable工作流入门看这篇就够了
19310 1