注:(位操作符、位移操作符 在前面讲过 ,详细介绍请看:CSDN)
1、求存储整型数值二进制值里的1有几位
法1:使用位操作符和位移操作符
这个方法比较简单,所以就不细说了,如果没看懂可以私信我。
法2:只利用位操作符进行操作
假设输入值为 15 (因为正数的补码在5的二进制数前都是零,就不一一写上了)
下面每两个为一组
n 1111
n-1 1110
n 1110
n-1 1101
n 1100
n-1 1011
n 1000
n-1 0111
之后 n = n &(n-1)的值为0,此时while循环结束,count不再递增,而之前count每递增一次,便排除了一个二进制位中的 1,所以count的值就是输入数字二进制位中1的个数
2、二进制位置0或者重置1
题目:编写代码将15二进制序列的第五位修改为1,然后再改回0
下面是上图运算的流程
00000000000000000000000000001111 ——15的补码
00000000000000000000000000000001 ——1的补码
00000000000000000000000000010000 ——1向补码向左移动4位得到的补码
00000000000000000000000000011111 ——按位或运算后的补码
00000000000000000000000000000001 ——1的补码
00000000000000000000000000010000 ——1向补码向左移动4位得到的补码
00000000000000000000000000001111 ——运算后的n的补码和(“1向补码向左移动4位得到的补码”经过按位取反运算后的结果)再进行按位与运算重置补码,得到原数