位操作

Java中的三种位移运算符

2016-08-21  本文已影响266人  Ggx的代码之旅

一直以来位移运算符都用的很少,所以一直忽略了它。不过今天突然明白了规则于是乎就上网翻看了一下别人的一些博客,验证了自己的想法,没想到还真是这样的,很是欣慰呀,至少以后在看到此类东西不会一头雾水了。以下内容包含网上查找的内容

  1. << 左移运算符
    表达式:value << num
    左移的规则
    丢弃最高位,0补最低位
    按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。
    当左移的运算数是int 类型时,每移动1位它的第31位就要被移出并且丢弃;
    当左移的运算数是long 类型时,每移动1位它的第63位就要被移出并且丢弃。
    当左移的运算数是byte 和short类型时,将自动把这些类型扩大为 int 型。
    计算过程
    举例:8是int型的情况下8<<3结果等于64,相当于8×2的3次方
    把8转换为二进制数字0000 0000 0000 0000 0000 0000 0000 1000,
    把这组数字左移3位则得到的最终结果是0000 0000 0000 0000 0000 0000 0100 0000,

  2. >> 右移运算符
    表达式:value >> num
    左移的规则
    符号位不变,左边补上符号位
    按二进制形式把所有的数字向右移动对应的位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1
    当右移的运算数是byte 和short类型时,将自动把这些类型扩大为 int 型。
    如果要移走的值为负数,每一次右移都在左边补1,如果要移走的值为正数,每一次右移都在左边补0,这叫做符号位扩展(保留符号位),在进行右移操作时用来保持负数的符号。
    计算过程
    35 >> 2(35为int型)35 >> 2结果等于8,相当于8/2的2次方
    35转换为二进制:0000 0000 0000 0000 0000 0000 0010 0011
    把低位的最后两个数字移出:0000 0000 0000 0000 0000 0000 0000 1000
    转换为十进制: 8

  3. >>> 无符号右移运算符
    表达式:value >>> num
    无符号右移的规则只记住一点:忽略了符号位扩展,0补最高位
    无符号右移运算符>>> 只是对32位和64位的值有意义

补充一下之前欠缺的:0x8f,此16进制数转换为二进制位1000 1111,
通常颜色用16进制数
例如:0xFBFFFFFF,从左往右FB表示透明度,FFFFFF表示颜色
用二进制表示就是:
1111 1011 1111 1111 1111 1111

上一篇 下一篇

猜你喜欢

热点阅读