两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同
2017-04-10 12:32
190 查看
两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
输入例子:
1999 2299
输出例子:7
解决这个问题,需要两个知识点:
(1)异或:参加运算的两个对象,如果两个相应位为“异”(值不同),则该位结果为1,否则为0。
(2)一个数和这个数减一,按位与(&),可以去掉二进制中最右面的"1"。
即, 十进制 二进制
10 & 9 1010
b00a
1001
————
1000
所以,我们可以同过将m和n两个数异或(num = m ^ n),再通过num = num&(num-1),求出num中“1”的个数,来计算有多少个不同的(bit)位。
下面是运行结果:
输入例子:
1999 2299
输出例子:7
解决这个问题,需要两个知识点:
(1)异或:参加运算的两个对象,如果两个相应位为“异”(值不同),则该位结果为1,否则为0。
(2)一个数和这个数减一,按位与(&),可以去掉二进制中最右面的"1"。
即, 十进制 二进制
10 & 9 1010
b00a
1001
————
1000
所以,我们可以同过将m和n两个数异或(num = m ^ n),再通过num = num&(num-1),求出num中“1”的个数,来计算有多少个不同的(bit)位。
#include <stdio.h> int differ_num_of_bit(int x,int y) { int num = 0; int count = 0; num = x ^ y; while(num) { count++; num = num&(num-1); } return count; } int main() { int a = 0; int b = 0; int ret = 0; scanf("%d%d",&a,&b); ret = differ_num_of_bit(a,b); printf("%d\n",ret); return 0; }
下面是运行结果:
相关文章推荐
- 两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同
- 求两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同
- 编程实现:两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
- 1.编程实现: 两个int(32位)整数m和n的二进制表达中, 有多少个位(bit)不同? 输入例子: 1999 2299 输出例子:7
- 两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同
- 1.输出一个整数的每一位。2. 编程实现: 两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
- 编程实现: 两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
- C语言:两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同(模除、移位)
- 编程实现: 两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
- c语言编程实现两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同
- 用c语言实现,两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
- 两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
- 4.编程实现: 两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同? 输入例子: 1999 2299 输出例子:7
- 两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?(异或的用法)
- 【C语言】【笔试题】两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同
- 两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
- 两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同
- 两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同
- 两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同
- 两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同? 输入例子: 1999 2299 输出例子:7