美文网首页
位运算之左移右移运算

位运算之左移右移运算

作者: 卖糖果的小傻嘟 | 来源:发表于2017-12-08 07:38 被阅读17次

首先我们先看下关于左移右移的Java代码及其结果:

class BitOperation {
    public static void main(String[] args) {
        System.out.println("3<<2" + 3<<2);
    }
}

输出结果为:12

注:我们常说的左移右移都是指的是对原数据换算成二进制之后的操作

左移操作(<<)

规则:
右边空出的位用0填补
高位左移溢出则舍弃该高位。
3 在32位计算机中的存储为(前后两条黑色竖线人为添加以方便于识别):

| 0000 0000 0000 0000 0000 0000 0000 0011 |

左移2位结果如下:

00 | 00 0000 0000 0000 0000 0000 0000 0011 XX |

左移两位高位溢出,舍弃,低位也就是XX的位置空余,则补0变为:

| 0000 0000 0000 0000 0000 0000 0000 1100 |

再转换为十进制数:输出即为:12
我们再看个例子:这次操作 3<<3位,大家计算看看:答案为:24;

| 0000 0000 0000 0000 0000 0000 0001 1000 |

大家也可以对其他数字进行左移操作试试,经过多次操作我们可以得出:左移几位其实就是该数据乘以2的几次方
也就是以上例子可以通过以下式子快速算出:

3<<3 == 3(2)^3 = 38 = 24;
3<<2 == 3(2)^2 = 34 = 12;

右移操作(>>)

左边空出的位用0或者1填补。正数用0填补,负数用1填补。

简单点记:就是高位是什么就用什么补!

例如:6>>1

| 0000 0000 0000 0000 0000 0000 0000 0110 |

我们进行右移操作

| 0000 0000 0000 0000 0000 0000 0000 0011 | 0

则结果为 6>>1 = 3 == 6 / (2^1)

大家也可以对其他数字进行左移操作试试,经过多次操作我们可以得出:右移几位其实就是该数据除以2的几次幂,若为小数,取整即可
-6>>2 = 3 == - 6 / (2^2) = -1

相关文章

  • python学习第二天 基础知识二

    运算符 +、-、、/、//(整除)、*(幂运算符)、%(取余) 输出结果 位运算符 &位与,|位或,左移<<,右移...

  • java 三种运算符理解

    >> : 右移运算符;低位移出,符号位不变 << : 左移运算符;高位移出,符号位不变 >>> : 无符号右移; ...

  • 位运算之左移右移运算

    首先我们先看下关于左移右移的Java代码及其结果: 输出结果为:12 注:我们常说的左移右移都是指的是对原数据换算...

  • 【C语言笔记】<八>源码补码反码及位运算

    源码补码反码 位运算 左移右移 变量存储细节

  • 位运算

    Java提供的位运算符有:左移( << )、右移( >> ) 、无符号右移( >>> ) 、位与( & ) 、位或...

  • Java 位运算

    本文主要介绍 Java 提供的位运算符:左移( << )、右移( >> ) 、无符号右移( >>> ) 、位与( ...

  • C概念及循环

    一,类型转换运算 二,位运算 位与:& 位或:| 非:~ 异或:^ 左移:<< 右移:>> 三,赋值操作符 =:在...

  • java位运算

    Java 位运算(移位、位与、或、异或、非) Java提供的位运算符有:左移( << )、右移( >> ) 、无符...

  • 面试精选之位操作问题集锦

    Java 中位运算符有与(&)、或(|)、非(~)、异或(^)、左移(<<)、右移(>>)、无符号右移(>>>),...

  • C++ - 运算符

    移位运算符: 左移运算符 <<左移运算符相当于乘以2,并且效率要高出乘法许多,尽量使用左移运算符。 右移运算符 >...

网友评论

      本文标题:位运算之左移右移运算

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