当前位置:网站首页 > 技术博客 > 正文

左移位运算符什么意思



位运算是把数字用 二进制 表示之后,对每一位上 0 或者 1 的运算。位运算共有 5 种运算:与、或、异或、左移、右移。

与、或、异或的运算规律:

与 ( & )或 ( )异或 ( ^ )

左移:

左移运算符 m << n 表示把 m 左移 n 位。在左移 n 位的时候,最左边的 n 位将被丢弃,同时在最右边补上 n 个 0 。比如:

 

Python 代码【结果有点不一样】:

 

右移:

右移运算符 m >> n 表示把 m 右移 n 位。在右移 n 位的时候,最右边的 n 位将被丢弃。但右移时处理最左边位的情形要复杂一点。如果数字是一个无符号树值,则用 0 填补最左边的 n 位;如果数字是一个有符号数值,则用数字的符号位填补最左边的 n 位。也就是说,如果数字原先是一个正数,则右移之后在最左边补 n 个 0 ;如果数字原先是负数,则右移之后在最左边补 n 个 1 。下面是对两个 8 位有符号数进行右移的例子:

 

Python 代码【结果有点不一样】:

 

问题: 请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001 ,有 2 位是 1 。因此,如果输入 9 ,该函数输出 2

分析: 如果整数不等于 0 ,那么该整数的二进制表示中至少有 1 位是 1 。

  • 先假设这个数的最右边一位是 1 ,那么该数减去 1 后,最右边一位变成了0,其他位不变;
  • 再假设最后一位不是 1 而是 0 ,而最右边的 1 在第 m 位,那么该数减去 1 ,第 m 位变成 0 , m 右边的位变成 1 , m 之前的位不变;

上面两种情况总结,一个整数减去 1 ,都是把最右边的 1 变成 0 ,如果它后面还有 0 ,那么 0 变成 1 。那么我们把一个整数减去 1 ,与该整数做位运算,相当于把最右边的 1 变成了 0 ,比如 1100 与 1011 做位与运算,得到 1000 。那么一个整数中有多少个 1 就可以做多少次这样的运算。

 
 

执行结果:


                            

版权声明


相关文章:

  • 公式编辑器破解方法2024-12-26 16:00:59
  • stty命令详解2024-12-26 16:00:59
  • 三态门电路特点2024-12-26 16:00:59
  • js数据类型分为哪两大类2024-12-26 16:00:59
  • timespec结构体2024-12-26 16:00:59
  • wd硬盘是固态的吗2024-12-26 16:00:59
  • linux iops 监控2024-12-26 16:00:59
  • ir2104驱动电路原理2024-12-26 16:00:59
  • c中malloc函数的用法2024-12-26 16:00:59
  • java虚拟机栈是线程隔离的吗2024-12-26 16:00:59