题目的意思就是,如何判断A和B的二进制表示中有多少位(bit)不一样?
这是编程之美当中一道练习题,我也就邯郸学步的想了一个算法:
1. 先做位与运算 A & B, 得到结果C;
2. 接着做位或运算 A | B,得到结果D;
3. 再做一次异或运算,不过操作的数不是 A 与 B,而是 C ^ D , 得到结果E;
4. 判断结果 E 其二进制表示中1的个数就得到结果啦。
以下举例说明,为了减少复杂度,就使用八位二进制吧。设 A = 0010 1011, B = 0110 0101.
1. C = A & B = 0010 0001;
2. D = A | B = 0110 1111;
3. E = C ^ D = 0100 1110;
4. 结果E中有4个1,那么也就是说将A变成B,需要改变4位(bit)。
至于如何判断E的二进制表示中有几个1,请参考编程之美p33。
算法原理如下:
1. A & B,得到的结果C中的1的位表明了A和B中相同的位都是1的位;
2. A | B, 得到的结果D中的1的位表明了A和B在该位至少有一个为1的位,包含了A 与 B 都是1的位数,
经过前两步的位运算,,C 中1的位表明了A 和 B在该位都是1,D中为0的位表明了A 和 B 在该位都是0 ,所以进行第三步。
3. C ^ D,E 中为1的位表明了A 和 B不同的位。
分享到:
相关推荐
**题目**: 设A和B是两个长为n的有序数组,现在需要将A和B合并成一个排好序的数组,任何以元素比较作为基本运算的归并算法在最坏情况下至少要做( )次比较。 **选项**: A.n2 B. n log n C. **解析**: - 在最坏的情况...
该函数调用中有两个实参,即`(e1, e2)`和`(e3, e4, e5)`。 ### 15. 数组元素 #### 题目描述 按内存排列顺序,数组`char a[2]`中的所有元素是什么? #### 分析 数组`char a[2]`的元素按内存排列顺序为`a[0]`和`a[1...
设A和B是两个长为n的有序数组,现在需要将A和B合并成一个排好序的数组,任何以元素比较作为基本运算的归并算法在最坏情况下至少要做多少次比较?** - **解析**: 归并两个有序数组的最坏情况是比较次数等于数组的总...
给出的代码示例`Reverse`函数使用了索引法,通过两个指针`b`和`e`分别指向字符串的开头和结尾,然后交换它们所指的元素,直到两个指针相遇。 2. **链表逆序**: - 链表逆序需要改变每个节点的next指针,使其指向前...
这个函数接受两个整数引用,并返回较大的那个值的引用。通过引用传递参数,可以在函数内部修改原始变量的值,如: ```cpp int x = 55, y = 77; max(x, y) += 12 + 11; // 此时 y 的值变为 92 cout ;y=" ; // 输出:x...
- 给定两个浮点数[pic]×(-0.1110)和[pic]×(-0.0010),阶码4位(含阶符1位),尾数5位(含尾符1位)。 - 通过补码运算规则求出x+y的二进制浮点规格化结果。 - 首先,调整阶码使两者对齐。 - 然后,进行尾数相加。...
这是一个关于位操作的题目,目标是计算一个整数中二进制表示下1的个数。有多种高效算法可以解决这个问题,如Kernighan's Algorithm或Bit Counting(也称为Hamming Weight)。Kernighan's Algorithm通过异或操作将...
代码首先定义了一个名为`Solution`的类,其中有两个方法:`bit1Count`和`combinationSum3`。`bit1Count`方法用于计算一个无符号整数中二进制形式的1的个数,而`combinationSum3`是解决该问题的主要方法。 在`bit1...
对于一个字节(8位)的变量,求其二进制表示中“1”的个数是一个常见的问题。这一问题不仅出现在计算机科学的基础课程中,也是很多编程竞赛和技术面试中的经典题目。解决这类问题的目标通常是为了提高算法的执行效率...
**题目:** 设有下面两个类的定义,类 Person 和类 Student 的关系是? ``` class Person { class Student extends Person { long id; // 身份证号 int score; // 入学总分 String name; // 姓名 int getScore...
例如,`11 & 1` 和 `0b1 & 0b1` 都会得到1,因为这两个数在二进制表示的每一位上都为1。其他例子如 `0b101 & 0b110` 会得到 `0b100`(十进制4),因为只有最右边的一位是相同的1。 4. **按位或(`|`)**: 这个操作...
18. printf函数的输出:给定的printf语句中,只有一个格式说明符,但有两个输出项,按照C语言的规定,输出值将是最后一个有效值,即2003,答案是D.输出值为2003。 19. 浮点数四舍五入:要将float型变量x保留两位...
它遵循这样的规则:当两个输入都是1时,输出为1;否则输出为0。例如题目中给出的例子:01011001 ∧ 10100111 的结果是00000001,即选项C。 ### 3. 存储汉字字形码所需的字节数 汉字字形码用于显示或打印汉字时的...
**知识点**: 当定义数组时,使用冒号表示法,如`x=start:end`会创建一个从`start`到`end`的数组,包含`start`和`end`两个端点值。 - **选项分析**: - **数组x=0:5**表示从0到5的数组,包含0和5,因此共有6个元素。 ...
- 计算机中最小的数据单位是比特(bit),一个比特只能表示两种状态之一,通常是0或1。比特是构成字节的基本单位,而字节是由8个比特组成的。 ### 单选题:接口的描述 **题目**: 关于接口,描述正确的是? **...
24. 数值字段精度:要存储具有4位小数的数值,至少需要6位(考虑负号、整数部分、小数点和4个小数位)。 25. 对象概念:对象是属性(数据)和方法(行为)的封装体,通过消息传递进行通信,不一定具有继承性或多态...
在给定的文件"3I5xnXZB.e"中,可能包含的是一个易语言的源代码示例,用于演示如何使用位左移和位右移操作。学习这个源码,你可以更深入地理解这两种操作的实际运用,同时也能提升你在易语言中的编程技能。 总结来说...