位运算题目
题目一:
题目描述:
函数int bis(int x,int m)(位设置)生成一个结果z,z是由m的位来修改x的位得到的,在m的二进制表示为1的每个位置上,将z对应的位设置为1。
函数int bic(int x,int m)(位清除)生成一个结果z,z是由m的位来修改x的位得到的,在m的二进制表示为1的每个位置上,将z对应的位设置为0。
仅使用bis和bic来计算异或运算
int xor (int x,int y) { int result = ____ ; return result; }
题目分析:
容易知道,bis运算等价于OR,bic运算等价于x & ~ m。对于^,有属性x ^ y = (x & ~ y)| (y & ~ x),由此可以得到
int xor (int x,int y) { int result = bis(bic(x, y), bic(y, x)); return result; }
题目二:
题目描述:
不用 '*' '/' 和 '%' 运算实现两个整数的除法
题目分析:
例如 16 / 3,可以按照3的倍数来操作。 3 * 1 = 3, 3 * 2 = 6, 3 * 2 * 2 = 12 ...,而2 * 2等可以用位运算方式表示。
那么有16 - 3 = 13, 13 - 3 * 2 = 7, 而7 < 3 * 2 *2。可以迭代处理,再计算剩下的 7 / 3,依次进行。
示例代码: