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

第十一章:位运算符与位运算

文章目录

  • 第十一章:位运算符与位运算
        • 1.按位与运算:&
        • 2.按位或运算:|
        • 3.按位异或运算:^
        • 4.取反运算符:~
        • 5.左移运算符:<<
        • 6.右移运算符:>>
        • 总结

第十一章:位运算符与位运算

位运算将表达式或变量的值看成二进制数,对于它的每个二进制位逐位进行运算,所以不能用于float、double、long double、void或更复杂的数据类型,即只能用于整型、字符型数据等。

在这里插入图片描述

1.按位与运算:&
  • 作用:位逻辑与运算,参与运算的两个操作数按二进制位进行逻辑与运算

  • 运算规律:全1为1

注意:参与运算的两运算数据先转换成补码形式,再进行位运算

  • 用途:
    • 清零:找到合适的二进制数,原来的数为1的位,新数中相应的位为0.
    • 取一个数中的某些指定位
      • 一个short a ,若取高字节,则与0177400进行位与运算,特点:高字节全为1,低字节全为0
      • 若取低字节,则与0377进行位与运算,特点:高字节全为0,低字节全为1
2.按位或运算:|
  • 作用:将两个操作数对应的每一位分别进行逻辑或操作
  • 规律:全0为0
0|0=0,0|1=1,1|0=1,1|1=1
3.按位异或运算:^
  • 作用:将两个操作数对应的每一位进行异或操作
  • 规则:两个数对应的二进制位__相同为0,相异为1__
0^0=0  0^1=1  1^0=1  1^1=1
  • 用途:

    • 使特定位翻转:一个数若想使其某些特定位翻转,则与一个数相异或,使该数对应位全为1
    若oxfa位翻转11111010
    (^) 00001111
    --> 11110101
    
    • 与0相^,保留原值
    x0x35^0   00110101
    (^)00000000
    -->00110101
    

    与0相保留原位,与1相翻转

    • 用来清0:一个整数与其自身进行异或运算,结果必为0, a^a=0

    • 交换两个值,不用临时变量

    a=a^b;
    b=b^a;
    a=a^b;a=01              b=10               a=11b=10              a=11               b=01
    (a^b)  a=11       (b^a)  b=01        (a^b)  a=10
    
4.取反运算符:~
  • 作用:用来求表达式或变量的反码
  • 运算规律:为单目运算符,将一个二进制数按位取反,即将1变为0,将0变为1
  • 应用:增加程序的移植性
eg:
若将一个变量x的低四位清零,对于不同数据的变量应选用不同的操作数,即
对于char x,y  应写作:y=x&0xf0

注意:位运算符除了~外,均为双目运算符,要求两侧各有一个一个运算量

5.左移运算符:<<
  • 作用:将一个数的二进制位全部左移若干位

  • 左移1相当于该数×2

  • 左移高位舍弃0:相当于乘2的n次幂

6.右移运算符:>>
  • 作用:将一个数的二进制位全部右移若干位
  • 规则:

在这里插入图片描述

总结

在这里插入图片描述

相关文章:

  • ABC346 A-G 题解
  • uni-app 富文本编辑器
  • Rust 实战练习 - 1. 输入,输出,环境变量,字符,字符串
  • flask_Restful数据解析参数设置
  • [ Linux ] git工具的基本使用(仓库的构建,提交)
  • flowable-ui后台显式非中文
  • 百度文心一言(ERNIE bot)API接入Android应用
  • DNS、DNS劫持与HTTPDNS:原理、应用与安全分析
  • 外包干了一个月,忘记Git怎么使用了...
  • Rust 标准库:std::env::args() 函数简介
  • linux系统装载nginx的笔记
  • IDEA一键备份MySQL数据库(mysqldump版)
  • 树状打印二叉树的类Java、Go、PHP
  • 二叉树的遍历及线索二叉树试题解析
  • 让手机平板成为AI开发利器:AidLux
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • 2017 前端面试准备 - 收藏集 - 掘金
  • CSS实用技巧干货
  • eclipse的离线汉化
  • leetcode98. Validate Binary Search Tree
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • Python十分钟制作属于你自己的个性logo
  • 分布式任务队列Celery
  • 构建工具 - 收藏集 - 掘金
  • 前端之React实战:创建跨平台的项目架构
  • 首页查询功能的一次实现过程
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • "无招胜有招"nbsp;史上最全的互…
  • (2)MFC+openGL单文档框架glFrame
  • (day6) 319. 灯泡开关
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (Python) SOAP Web Service (HTTP POST)
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (四)Android布局类型(线性布局LinearLayout)
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (转) ns2/nam与nam实现相关的文件
  • (转)shell中括号的特殊用法 linux if多条件判断
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .NET Framework Client Profile - a Subset of the .NET Framework Redistribution
  • .Net Remoting常用部署结构
  • .NET Standard 支持的 .NET Framework 和 .NET Core
  • .Net+SQL Server企业应用性能优化笔记4——精确查找瓶颈
  • .Net面试题4
  • .Net中的集合
  • .NET中使用Protobuffer 实现序列化和反序列化
  • .vue文件怎么使用_vue调试工具vue-devtools的安装
  • @javax.ws.rs Webservice注解
  • [22]. 括号生成
  • [52PJ] Java面向对象笔记(转自52 1510988116)
  • [Android]创建TabBar
  • [autojs]逍遥模拟器和vscode对接
  • [C++基础]-初识模板