美文网首页
彻底搞清楚二进制运算(位运算、位移运算)

彻底搞清楚二进制运算(位运算、位移运算)

作者: weylau | 来源:发表于2018-08-26 22:46 被阅读30次

网上对二进制运算解释的过于复杂,最近在看了韩顺平老师讲的二进制运算,这里总结出来分享给大家

一、首先认识理解 原码、反码、补码

以下都是对于有符号的二进制而言的

1、二进制的最高为是符号位:0表示证书1表示负数

2、正数的原码反码补码一样

1 ==> 原码 0000 0001 ==> 反码 0000 0001 ==> 补码 0000 0001

3、负数反码等于原码取反符号位不变,补码等于反码+1

-1 ==> 原码 1000 0001 ==> 反码 1111 1110 ==> 补码 1111 1111

4、0的反码补码都是0

5、计算机运算的时候都是以补码的方式来运算的

二、位运算

有三种位运算 即 &按位与 | 按位或 ^ 按位异或

运算规则

&按位与 :两位全1结果为1,否则为0
| 按位或 :两位有一位为1结果为1,否则为0
^ 按位异或:两个一个为1一个为0结果为1,否则为0
注意:所有的运算是以补码的方式来运算的,运算的结果也是补码需转回原码才是最后结果

案例:分别计算 2&-2、2|-2、2^-2
2的补码:和原码一样 0000 0010
-2的补码: 原码:1000 0010  反码:1111 1101  补码(原码+1):1111 1110

计算:2&-2
2  0000 0010
-2 1111 1110
结果:0000 0010    2

计算:2|-2
2  0000 0010
-2 1111 1110
结果:1111 1110    =》反码(补码-1):1111 1101 =》原码:1000 0010 =》-2

计算:2^-2
2  0000 0010
-2 1111 1110
结果:1111 1100    =》反码(补码-1):1111 1011 =》原码:1000 0100 =》-4

三、位移运算

右移运算符:>> 地位溢出符号位不变,并用符号位补溢出高位
左移运算符:<< 符号位不变地位补0

案例:分别计算 1 >> 2 、1 << 2
1 >> 2
1补码  =》0000 0001  >> 2  =》0000 0000  结果:0

1 << 2
1补码  =》0000 0001  << 2  =》0000 0100  结果:4

相关文章

  • 彻底搞清楚二进制运算(位运算、位移运算)

    网上对二进制运算解释的过于复杂,最近在看了韩顺平老师讲的二进制运算,这里总结出来分享给大家 一、首先认识理解 原码...

  • 开发基础随笔之位运算符(Bitwise Operators)

    位运算符,属于算术运算符 按位逻辑运算符: 位移运算符: 位运算符的运算数只能是整数 位移运算符:按位左移 a<<...

  • java位运算

    位运算符主要有3个:有符号右位移>>,有符号左位移<<,无符号右位移>>>,位运算的操作的对象是二进制的位,通过位...

  • Java位运算符及二进制常识(转)

    一、位运算 二、位移运算 三、二进制数 以Java中最常使用的int类型为例(32位)。 ㈠ 符号位 二进制数最左...

  • 位运算

    运算符含义&按位与|按位或^按位异或~取反<<左位移>>右位移 按位与运算符(&)按位与运算将两个运算分量的对应位...

  • Java学习笔记-第一天

    位运算符 位运算是直接对二进制进行运算. 异或运算(^):相同二进制位进行运算,结果是0.不相同二进制位运算结果是...

  • 二进制位运算实战(1)-开发一个进制转换工具

    从这篇文章你将了解到什么?ArrayBuffer的作用左位移和右位移运算的使用按位与运算的使用 之前介绍了二进制相...

  • 位移运算

    位移运算 无符号位移 >>> 无符号右移,无符号位运算用 0 补位 <<< 无符号左移 带符号位移 >> 带符号...

  • 运算 & 运算符

    运算 & 运算符 算术运算 比较运算 比较运算的结果为bool值 赋值运算 逻辑运算 位运算 二进制的运算 身份检...

  • Swift - 高级运算符介绍

    除了基本运算符之外,Swift还支持位运算和位移运算,包括:1、按位取反运算:操作符是 ~2、按位与运算:操作符是...

网友评论

      本文标题:彻底搞清楚二进制运算(位运算、位移运算)

      本文链接:https://www.haomeiwen.com/subject/cgeaiftx.html