笔记:左移运算

一、左移运算(<<)

左移运算符是一个二元的运算符,也就是有两个操作数,表示为x << y(x左移y位(二进制))。

其中x和y均为整数。

左移运算符<<用来把操作数的各个二进制位全部左移若干位,高位丢弃,低位补0。

例如,9<<3可以转换为如下的运算:

<< 0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 1001  (9 在内存中的存储)
-----------------------------------------------------------------------------------
     0000 0000 -- 0000 0000 -- 0000 0000 -- 0100 1000  (72 在内存中的存储)

所以9<<3的结果为 72。

又如,(-9)<<3可以转换为如下的运算:

<< 1111 1111 -- 1111 1111 -- 1111 1111 -- 1111 0111  (-9 在内存中的存储)
-----------------------------------------------------------------------------------
      1111 1111 -- 1111 1111 -- 1111 1111 -- 1011 1000  (-72 在内存中的存储) 

所以(-9)<<3的结果为 -72

左移的执行结果

X << y的执行结果等价于: x * 2^y

如果数据较小,被丢弃的高位不包含 1,那么左移 n 位相当于乘以 2 的 n 次方。

负数左移的执行结果

(-x)<< y 等价于 -(x << y)

左移负数位是什么情况

左移负数位其实效果和右移对应整数数值位一致

左移溢出会如何

高位左移溢出则舍弃该高位。

二、左移运算符的应用

1.取模转化成位运算

2.生成标记码

1  << k 作为第k个标记位的标记码

  1. 标记位置1
    1. 特点:位或上1,结果为1;位或上0,结果不变。

                x | (1 << k)

        2.标记位置0

                1.特点: 位与上0,结果为0;位与上1,结果不变。

                x & (~(1 << k) )

        3.标记位取反

                1.特点: 异或上1,结果取反;异或上0,结果不变。

                x ^ (1 << k)

3.生成掩码

你可能感兴趣的:(位运算,笔记,学习)