下面总结一下各种c++中出现的各种位运算的方法!


1 按位与运算符(&)
参加运算的两个数据,按二进制位进行“与”运算。
运算规则:0&0=0;   0&1=0;    1&0=0;     1&1=1;
       即:两位同时为“1”,结果才为“1”,否则为0
例如:3&5  即 0000 0011 & 0000 0101 = 0000 0001   因此,3&5的值得1。
 
另,负数按补码形式参加按位与运算
“与运算”的特殊用途
(1)清零。如果想将一个单元清零,即使其全部二进制位为0,只要与一个各位都为零的数值相与,结果为零。
 
(2)取一个数中指定位
方法:找一个数,对应X要取的位,该数的对应位为1,其余位为零,此数与X进行“与运算”可以得到X中的指定位。
例:设X=10101110,
    取X的低4位,用 X & 0000 1111 = 0000 1110 即可得到;
    还可用来取X的2、4、6位。
 
2 按位或运算符(|)
参加运算的两个对象,按二进制位进行“或”运算。
运算规则:0|0=0;   0|1=1;   1|0=1;    1|1=1;
      即 :参加运算的两个对象只要有一个为1,其值为1
例如:3|5 即 0000 0011 | 0000 0101 = 0000 0111   因此,3|5的值得7。 
 
另,负数按补码形式参加按位或运算。
“或运算”特殊作用:
(1)常用来对一个数据的某些位置1

方法:找到一个数,对应X要置1的位,该数的对应位为1,其余位为零。此数与X相或可使X中的某些位置1。
例:将X=10100000的低4位置1 ,用 X | 0000 1111 = 1010 1111即可得到。
 
3  异或运算符(^)
参加运算的两个数据,按二进制位进行“异或”运算。
运算规则:0^0=0;   0^1=1;   1^0=1;   1^1=0;
   即:参加运算的两个对象,如果两个相应位为“异”(值不同),则该位结果为1,否则为0。
 
“异或运算”的特殊作用:

(1)使特定位翻转 找一个数,对应X要翻转的各位,该数的对应位为1,其余位为零,此数与X对应位异或即可。
例:X=10101110,使X低4位翻转,用X ^ 0000 1111 = 1010 0001即可得到。
 
(2)与0相异或,保留原值 ,X ^ 0000 0000 = 1010 1110。
从上面的例题可以清楚的看到这一点。
4 取反运算符(~)
参加运算的一个数据,按二进制位进行“取反”运算。
运算规则:~1=0;   ~0=1;
      即:对一个二进制数按位取反,即将0变1,1变0。
 
使一个数的最低位为零,可以表示为:a&~1

~1的值为1111111111111110,再按“与”运算,最低位一定为0。因为“~”运算符的优先级比算术运算符、关系运算符、逻辑运算符和其他运算符都高。
 5 左移运算符(<<)
将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)。
例:a = a << 2 将a的二进制位左移2位,右补0,
左移1位后a = a * 2; 
若左移时舍弃的高位不包含1,则每左移一位,相当于该数乘以2。
 6 右移运算符(>>)
将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。
操作数每右移一位,相当于该数除以2。
例如:a = a >> 2 将a的二进制位右移2位,
左补0 or 补1 得看被移数是正还是负。
 
 
>> 运算符把 expression1 的所有位向右移 expression2 指定的位数。expression1 的符号位被用来填充右移后左边空出来的位。向右移出的位被丢弃。
例如,下面的代码被求值后,temp 的值是 -4:
  -14 (即二进制的 11110010)右移两位等于 -4 (即二进制的 11111100)。
  var temp = -14 >> 2
 
 
 7  无符号右移运算符(>>>)
 
 
>>> 运算符把 expression1 的各个位向右移 expression2 指定的位数。右移后左边空出的位用零来填充。移出右边的位被丢弃。
例如:var temp = -14 >>> 2
变量 temp 的值为 -14 (即二进制的 11111111 11111111 11111111 11110010),向右移两位后等于 1073741820 (即二进制的 00111111 11111111 11111111 11111100)。
 8 复合赋值运算符
位运算符与赋值运算符结合,组成新的复合赋值运算符,它们是:
&=    例:a &= b        相当于a=a & b
|=    例:a |= b        相当于a=a | b
>>=   例:a >>= b       相当于a=a >> b
<<= 例:a <<= b       相当于a=a << b
^=   例:a ^= b       相当于a=a ^ b
运算规则:和前面讲的复合赋值运算符的运算规则相似。
不同长度的数据进行位运算
如果两个不同长度的数据进行位运算时,系统会将二者按右端对齐,然后进行位运算
以“与”运算为例说明如下:我们知道在C语言中long型占4个字节,int型占2个字节,如果一个long型数据与一个int型数据进行“与”运算,右端对齐后,左边不足的位依下面三种情况补足,
(1)如果整型数据为正数,左边补16个0。
(2)如果整型数据为负数,左边补16个1。
(3)如果整形数据为无符号数,左边也补16个0。
如:long a=123;int b=1;计算a & b。
 
如:long a=123;int b=-1;计算a & b。
 
如:long a=123;unsigned int b=1;计算a & b。

按位与、或等运算方法相关推荐

  1. java 同或_按位与、或、异或等运算方法

    按位与运算符(&)参加运算的两个数据,按二进制位进行"与"运算.运算规则:0&0=0;  0&1=网络 按位与运算符(&) 参加运算的两个数据,按二 ...

  2. math python 向上取整_Python的数值基本运算和其它数学运算方法

    数值基本运算 支持最基本的数学运算符号:+ - * / % **.取正负+x -x,地板除法//,除法和取模divmod(x, y): 12345678910111213141516171819202 ...

  3. 计算机组成与结构第二章ppt,计算机组成原理(华科版)第二章 运算方法与运算器.ppt...

    文档介绍: 第二章运算方法与运算器 2.1 数据信息的表示方法 2.1.1数值数据的表示 淘在盛纬娃消镶勉桌乡利亚钦沙隐酋谴牲斗丙茸乔泛戊篡汽栽辫滔矮空芥计算机组成原理(华科版)第二章运算方法与运算器 ...

  4. 预习计算机组成原理之计算机的运算方法——笔记4

    系列文章目录 第六章--计算机的运算方法 文章目录 系列文章目录 前言 一.无符号数和有符号数 1.1 无符号数 1.2 有符号数 1.2.1 机器数与真值 1.2.2 原码表示法 (考试的时候注意写 ...

  5. 用计算机浮点数表示法计算,计算机组成原理第4章浮点数运算方法ppt课件

    PPT内容 这是计算机组成原理第4章浮点数运算方法ppt课件下载,主要介绍了浮点数的表示:浮点加减运算:浮点加减运算的步骤:浮点数加减运算流程图:浮点加减法运算:浮点运算所需的硬件配置,欢迎点击下载. ...

  6. 万能乘法速算法大全_小学数学指算法、加法、减法、乘法、除法简便运算方法大全,收藏...

    在小学数学的学习过程中,计算能力不过关的孩子,数学成绩普遍来说都不算特别理想.很多家长都在反映说,孩子数学成绩非常糟糕,其实很大的一个原因就是因为计算能力不过关.计算能力不仅对于孩子数学成绩的影响非常 ...

  7. 计算机组成原理:运算方法和运算器

    本文内容:定点运算,浮点运算,定点运算器和浮点运算器. 思维导图 在上篇文章中 计算机组成原理:数据与文字的表示方法 ,我们已经知道了数据与文字在计算机中是怎么表示的.在这一篇中,我们将知道数据是如何 ...

  8. 计算机组成原理第二章:运算方法和运算器

    本文内容:定点运算,浮点运算,定点运算器和浮点运算器. 思维导图 在上篇文章中 计算机组成原理:数据与文字的表示方法 ,我们已经知道了数据与文字在计算机中是怎么表示的.在这一篇中,我们将知道数据是如何 ...

  9. 计算机组成原理知识点总结(第3篇 第6章 计算机的运算方法)

    基于计算机组成原理(第2版)唐朔飞编著 第6章 计算机的运算方法 计算机中的数均放在寄存器中,通常称寄存器的位数为机器字长. 原码表示法: "0"表示+号,"1" ...

  10. 计算机组成原理--运算方法:加减乘除

    补码加减法 补码加法 公式:[x+y]补=[x]补+[y]补 补码减法: 为了将减法转变为加法,需证明公式: [x-y]补=[x]补+[-y]补 (证明) 为了求得同时[-y]补,需要证明[-y]补= ...

最新文章

  1. SFB公开课:TMG/IISARR/Web Application Proxy/发布UC(Lync/SFB)-2-通知
  2. SAP导出Excel错点拒绝处理
  3. Android中使用WebChromeClient显示Openlayers加载本地GeoJson文件显示地图(跨域问题解决)
  4. Visual Studio 2010 C++ 工程文件解读
  5. ueditor工具栏弹出html,UEditor工具栏上自定义按钮、图标、事件、窗口页面
  6. 安装docker环境
  7. Java 连接 数据库 (idea2022 + MySQL 演示,Oracle 通用)
  8. java开发中的dorado_dorado7开发常用技巧及代码
  9. Pyramidal Convolution: Rethinking Convolutional Neural Networks for Visual Recognition阅读笔记
  10. 如何在VMware Workstation上安装Nutanix CE的解决方案
  11. 计算机英语凤凰职教,凤凰职教英语第册Unit1.doc
  12. JZOJ5912 Van♂Usee
  13. Kernel Panic 介绍
  14. ABAQUS报错:“ADJUST cannot be used for non-faceted surfaces.”
  15. 在cmd中怎么进入mysql?
  16. 美容院客户的需求分析模型(REA模型)
  17. 他的爬虫软件助3000企业抓取数据 最高日采8000万条 营收50万元
  18. 用友ERP U8软件安装
  19. c# 开源持久层 oracle,rexdb: 高性能的数据持久层(ORM)框架,查询性能是Hibernate的2.3倍,Mybatis的1.7倍。...
  20. 6.Redis单线程为什么这么快?

热门文章

  1. 怎样辨别自己的手机是水货或行货?试试这个
  2. python脚本部署为Windows服务
  3. 台灯怎么选对眼睛好?盘点护眼台灯品牌排行
  4. 数据比对系统测试小结
  5. 常量和变量的存储类型
  6. 猜数字游戏,输入一个 1-100 以内的数字
  7. 基于Python的简易宿舍管理系统(课程作业附课程小论文)
  8. spring 事务实验
  9. 【RL-TCPnet网络教程】第15章 RL-TCPnet之创建多个TCP连接
  10. python+sqlite3-数据库增删改查操作