原文:位运算反(~)与(&)异或(^)或(|)右移(>>)左移(<<)

先知道这两个二进制数据的特点:   1=0000 0000 0000 0000 0000 0000 0000 0001

-1=1000 0000 0000 0000 0000 0000 0000 0001

1.最高位(首位)表示正负(0为正,1为负)

2.最低位(末位)表示奇偶(0为偶,1为奇)

一、按位取反(~)

十进制1按位取反后=?

分析:

1. 十进制1转为二进制为:1= 0000 0000 0000 0000 0000 0000 0000 0001

2. 按位取反:把原来的二进制得到一个新的二进制,原来是0的则变为1,1的则变为0。

1按位取反后得到   1111 1111 1111 1111 1111 1111 1111  1110

3.二进制的最高位(首位)表示正负(1为负,0为正),如果是负数,如果是负数,则需要用计算机中的补码来表示。

补码:补码=符号位(最高位)以后按位取反再加1.

补码为   1000 0000 0000 0000 0000 0000 0000  0010

4. 结果为:把补码转为十进制:  -2;

~1==-2

十进制-1按位取反后=?

1.            -1的二进制是 1000 0000 0000 0000 0000 0000 0000 0001

2. 负数是以其补码的形式储存的

-1在计算机中存的是 1111 1111 1111 1111 1111 1111 1111 1111

3.    按位取反:             0000 0000 0000 0000 0000 0000 0000 0000

4.结果为:转为十进制:0

~-1==0

二、按位与and(&)

按位与and(&): 相同位的两个数字都为1,则为1;若有一个不为1,则为0。

25&3=>    25= 0000 0000 0000 0000 0000 0000 0001 1001

3= 0000 0000 0000 0000 0000 0000 0000 0011

-------------------------------------------------------------------------------------

0000 0000 0000 0000 0000 0000 0000 0001

25&3==1

三、按位异或(^)

按位异或(^):相同位不同则为1,相同则为0

25^3=>    25= 0000 0000 0000 0000 0000 0000 0001 1001

3=  0000 0000 0000 0000 0000 0000 0000 0011

-------------------------------------------------------------------------------------

0000 0000 0000 0000 0000 0000 0001 1010

25&3==26

四、按位或(|)

按位或(|):相同位只要一个为1即为1。

25|3=>    25=  0000 0000 0000 0000 0000 0000 0001 1001

3=  0000 0000 0000 0000 0000 0000 0000 0011

-------------------------------------------------------------------------------------

0000 0000 0000 0000 0000 0000 0001 1011

25|3==27

五、右移(>>)

     把1的位置向右移n位,超出的就舍掉

15=0000 0000 0000 0000 0000 0000 0000 1111

15>>1=0000 0000 0000 0000 0000 0000 0000 0111

15>>1=7

:右移1位即除以21;,并且取整。

n>>4==n/(24)

64>>4==4

六、左移(<<)

把1的位置向左移n位,超出的就舍掉

:左移1位即乘以21;,并且取整。

n<<4==n*24

2<<4==32

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

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

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

  2. <位运算> 任意二进制数 异或两个相同的二进制数 还是原本的值

    二进制,即0与1. 因为两个相同的二进制 异或必为0.(类似于不进位加法) 二进制里与0异或为其原本的0与1.. 可得任意二进制数 异或两个相同的二进制数 还是原本的值. 可用于交换和加密.

  3. LeetCode解题中位运算的运用

    位运算是我最近才开始重视的东西,因为在LeetCode上面刷题的时候发现很多题目使用位运算会快很多.位运算的使用包含着许多技巧(详细可以参考http://blog.csdn.net/zmazon/ar ...

  4. 利用位运算进行a+b的计算(Java&&Python)

    题目链接 需要用到的位运算操作:异或(^).与(&).右移(<<) 异或运算:又称不进位加法,a^b得到的结果为a与b相加,但是需要进位的地方不进位得到的结果 与运算:找出来a和b ...

  5. #C语言初学记录(位运算)

    位运算 Problem Description7-1 数组元素循环右移问题 一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由 ...

  6. php实现不用加减乘除号做加法(1、善于寻找资源:去搜为什么位运算可以实现加法,里面讲的肯定要详细一万倍)

    php实现不用加减乘除号做加法(1.善于寻找资源:去搜为什么位运算可以实现加法,里面讲的肯定要详细一万倍) 一.总结 1.善于寻找资源:去搜为什么位运算可以实现加法,里面讲的肯定要详细一万倍 二.ph ...

  7. Java中的位运算

    昨天去面试的时候做到了一道Java的位运算题目,发现有个运算符不懂:">>>",今天特地查了一下,并小结一下常见的位运算符号: ~  按位非(NOT)(一元运算) ...

  8. Java位运算加密

    创建一个类,通过位运算中的”^"异或运算符把字符串与一个指定的值进行异或运算,从而改变字符串每个字符的值,这样就可以得到一个加密后的字符串.当把加密后的字符串作为程序输入内容,再与那个指定的 ...

  9. Java的位运算

    左移位操作 左移位运算的符号为[<<],左移位运算符左面的操作元称作被移位数,右面的操作数称作移位量. 左移位运算是双目运算符,操作元必须是整型类型的数据,其移动过程是:[a <&l ...

随机推荐

  1. java入门之异常处理小结

    (1)异常和错误 异常(Exception):不正常的事件,会中断程序,在运行中发生的意外,程序本身可以处理,防止程序中断:程序中会捕获的异常信息,并告诫用程序员,不要求程序必须对它做处理.catch ...

  2. (转)Maven实战(三)Eclipse构建Maven项目

    1. 安装m2eclipse插件    要用Eclipse构建Maven项目,我们需要先安装meeclipse插件    点击eclipse菜单栏Help->Eclipse Marketplac ...

  3. EMV/PBOC解析(三) TLV格式解析(C#)

    1.什么是TLV格式? TLV即Tag-Length-Value,常在IC卡与POS终端设备中通过这样的一个应用通信协议进行数据交换. 金融系统中的TLV是BER-TLV编码的一个特例编码规范,而BE ...

  4. USACO lamps

    IOI 98称号.然后,它似乎没有很困难.即使我能做到这一点微弱的残留物.所有的button按两次不按,高达因此实际上总的等效按4二级,首先C往下<=4,则搜索将能直接照射,总共只有16状态(事 ...

  5. Android SwitchButton(滑动开关)

    @RemoteView public class Button extends TextView { public Button(Context context) { this(context, nu ...

  6. 使用单例模式实现自己的HttpClient工具类

    引子 在Android开发中我们经常会用到网络连接功能与服务器进行数据的交互,为此Android的SDK提供了Apache的HttpClient 来方便我们使用各种Http服务.你可以把HttpCli ...

  7. [转] Gradle中的buildScript代码块

    PS: 在build script中的task apply plugin: 'spring-boot' 需要 classpath("org.springframework.boot:spri ...

  8. OD: ActiveX Vulnerabilities

    通过一个精心构造的页面 exploit 第三方软件中的 ActiveX 已经成为一种惯用攻击手段,众多知名软件公司都曾被发现其注册的 ActiveX 中存在严重的缓冲区溢出漏洞,一个被广泛使用的第三方 ...

  9. CSS实现垂直居中的常用方法

    在前端开发过程中,盒子居中是常常用到的.其中 ,居中又可以分为水平居中和垂直居中.水平居中是比较容易的,直接设置元素的margin: 0 auto就可以实现.但是垂直居中相对来说是比较复杂一些的.下面 ...

  10. 创建实体数据模型需要注意的,不要选单复数形式,否则AddObject出问题

    //这个测试太不容易了,总是出错,addInfo 方法进去,最后调用context对象.AddObject(),也就是context.AddObject(entitySetName, entity); ...