C语言提供的位运算符列表:
运算符 含义 描述
& 按位与 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0
| 按位或 两个相应的二进制位中只要有一个为1,该位的结果值为1
^ 按位异或 若参加运算的两个二进制位值相同则为0,否则为1
~ 取反 ~是一元运算符,用来对一个二进制数按位取反,即将0变1,将1变0
<< 左移 用来将一个数的各二进制位全部左移N位,右补0
>> 右移 将一个数的各二进制位右移N位,移到右端的低位被舍弃,对于无符号数,高位补0

1. and(&)运算 (按位与)
  and运算通常用于二进制取位操作,例如一个数 and 1的结果就是取二进制的最末位。这可以用来判断一个整数的奇偶,二进制的最末位为0表示该数为偶数,最末位为1表示该数为奇数.
  相同位的两个数字都为1,则为1;若有一个不为1,则为0。
  00111
  11100
  (&或者and)
  ----------------
  00100
 2. or(|)运算 (按位或)
  or运算通常用于二进制特定位上的无条件赋值,例如一个数or 1的结果就是把二进制最末位强行变成1。如果需要把二进制最末位变成0,对这个数or 1之后再减一就可以了,其实际意义就是把这个数强行变成最接近的偶数。
  相同位只要一个为1即为1。
  00111
  11100
  (|或者or)
  ----------------
  11111
 3. xor(^)运算 (按位异或)
  异或的符号是⊕。
  xor运算通常用于对二进制的特定一位进行取反操作,因为异或可以这样定义:0和1异或0都不变,异或1则取反。
  xor运算的逆运算是它本身,也就是说两次异或同一个数最后结果不变,即(a xor b) xor b = a。xor运算可以用于简单的加密,比如我想对我MM说1314520,但怕别人知道,于是双方约定拿我的生日19880516作为密钥。1314520 xor 19880516 = 20665500,我就把20665500告诉MM。MM再次计算20665500 xor 19880516的值,得到1314520,于是她就明白了我的企图。
  相同位不同则为1,相同则为0。
  00111
  11100
  (^或者xor)
  ----------------
  11011

4.~取反就是如果是00111,则变为11000 (按位取反)

~是按位取反的意思.
57的二进制表示为(1个字节):00111001
按位取反后(~57)的二进制:  11000110 此表示为十进制:-70
这是一个负数,是有符号的数,负数在计算机里要用其补码来表示:补码=符号位以后按位取反再加1.
所以-70(11000110)符号位以后按位取反后为(10111001) 再加1 则为(10111010)
换成十进制为:-58
因此~57=-58

5.>>是右移位运算
右移1位即除以2;,并且取整。
m_Height>>4相当于:
m_Height/16

<<是左移位运算
若左移一位,则其数值变为 a*2

另外,这些位运算符,还可以像a+=b这样写,运算效果类似
int a = 1,b = 2,c = 4;//0x0001,0x0010,0x0100
a |= b;// a = 0x0011 = 3
b |= c;// b = 0x0110 = 6

参考:https://blog.csdn.net/zhongjling/article/details/8004103

按位与(&),或(|),异或(^),取反(~),左移(<<),右移(>>)的更多相关文章

  1. Java_按位与&,按位或,取反,左移,右移运算符

    //按位与运算& System.out.println(0&0);//0 System.out.println(0&1);//0 System.out.println(1&am ...

  2. php位运算 与 或 异或 取反

    <?php /** php中有4个位运算,分别是&与 |或 ^异或 ~取反 & 两位全为1,结果为1 | 有一位为1,结果为1 ^ 一个为0,一个为1,结果为1 ~ 取反0-&g ...

  3. python 左移右移 2个数交换

    左移右移的能够使得数字*2或者/2 那*3怎么办,就左移一位然后再+ 经典面试题: 1.交换2个数,不用temp   a=10  b=12 1.1 a = a + b = 22 b = a - b = ...

  4. jQuery实现左移右移

    <html> <head> <meta charset="utf-8"> <title>完成左移右移</title> & ...

  5. EASYUI- EASYUI左移右移 GRID中值

    EASYUI左移右移 GRID中值 $("#addAll").click(function(){ var ids = []; var names = []; var srcrows ...

  6. 【转载】c语言数据的左移右移

    原文地址:http://www.cnblogs.com/myblesh/articles/2431806.html 由于在飞控程序中执行效率对程序的影响相当大,所以一个好的运算效率很重要.左移右移比单 ...

  7. 嵌入式C开发---用循环实现左移右移

    //将n左移m位 int byte_to_left_move(int n , int m) { int i , ret = 1 ; if(n == 0 || n < 0) { return ; ...

  8. select多选左移右移的实现

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...

  9. JAVA 基础编程练习题32 【程序 32 左移右移】

    32 [程序 32 左移右移] 题目:取一个整数 a 从右端开始的 4-7 位. 程序分析:可以这样考虑: (1)先使 a 右移 4 位. (2)设置一个低 4 位全为 1,其余全为 0 的数.可用~ ...

  10. 【C#】关于左移/右移运算符的使用

    吐槽先~为什么我的老师大学时候没教过我这东西  - -. 继续送栗子: 比如 “(1+2)<<3” 你们猜等于几~ Debug.Log((1+2)<<3)之后输出的是“24”. ...

随机推荐

  1. 解决GitHub下载慢或下载失败问题

    1.登录自己的码云账户 码云网站:https://gitee.com/luckyplj8/events 2.新建一个仓库. 3.选择导入已有仓库. GitHub资源链接: 4.等待码云克隆项目,大概1 ...

  2. Python之路【第十二篇】:Python面向对象高级

    一.反射 1 什么是反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发了计算机科学领域关于应用反射性的研究 ...

  3. yii2 AppAsset.php 和 assetManager 组件

    01) 背景:Yii2中使用了 AdminLTE 3.0.0  后框架自带的bootstrap.css 与 admin样式有冲突,需要去掉 bootstrap.css 在 backend/config ...

  4. .Net Core SignalR+LayUi(1)-简单入门

    本系列主要开发客服聊天系统的总结. 基于.Net Core2.2 +SignalR+Layui实现的人对人聊天功能 SignalR简介 SignalR是一个.Net Core/.Net Framewo ...

  5. 题解 POJ 2559-SP1805 【HISTOGRA - Largest Rectangle in a Histogram】

    题目链接: https://www.luogu.org/problemnew/show/SP1805 http://poj.org/problem?id=2559 思路: ## 单调栈 首先如果所有矩 ...

  6. 2019 人民网java面试笔试题 (含面试题解析)

      本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.人民网等公司offer,岗位是Java后端开发,因为发展原因最终选择去了人民网,入职一年时间了,之前面试了很多 ...

  7. IDEA自动清理优化import包

    IDEA自动清理优化import包 直接上图: Add unambiguous imports on the fly:快速添加明确的导入. Optimize imports on the fly:快速 ...

  8. 【转载】sqlserver中小数类型float和deciaml类型比较

    在sqlserver数据库中,float类型和double类型都可以用来表示小数类型,float类型是一种近似数值的小数类型,而decimal类型则是精确数值的小数类型.如果需要在sqlserver数 ...

  9. JavaWeb 之 Filter 验证用户登录案例

    需求: 1. 访问一个网站的资源.验证其是否登录 2. 如果登录了,则直接放行. 3. 如果没有登录,则跳转到登录页面,提示"您尚未登录,请先登录". 代码实现: import j ...

  10. 继续了解Java的纤程库 – Quasar

    前一篇文章Java中的纤程库 – Quasar中我做了简单的介绍,现在进一步介绍这个纤程库. Quasar还没有得到广泛的应用,搜寻整个github也就pinterest/quasar-thrift这 ...