位运算是把数字用 二进制 表示之後对每一位上 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 如果它后面还有 0 ,那么 0 变成 1 那么我们把一个整数减去 1 ,与该整数做位运算相当于把最右边的 1 变成了 0 ,比如 1100 与 1011 做位与运算得到 1000 。那么一个整数中有多少个 1 就可以做多少次这样的运算
一个数 n 和 它-1 做与运算,就相当于干掉了最右边的 1 .
你可以吧W定义为无符号數就好了
你对这个回答的评价是?
下载百度知道APP抢鲜体验
使用百度知道APP,立即抢鲜体验你的手机镜头里或许有别人想知道的答案。