标签:
题目:世界上有10种人,一种懂二进制,一种不懂。那么你知道两个int32整数m和n的二进制表达,有多少个位(bit)不同么?
1999 2299
7
背景知识:将两个二进制数变成等长(较短的那个高位补0),然后将两个二进制数进行按位“异或”,结果中为1的那些位,就是这两个二进制数不同的位。
在计算机中的数据的保存和运算都是以二进制的形式进行的,但不是直接的原码,而是原码的补码,也就是说在计算机中,数据的运算都是以数据的补码进行的。
异或:
具体代码:
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 int main() 5 { 6 int n = 1999; 7 int m = 2299; 8 int compare1 = 0, compare2 = 0; 9 int result = 0, count = 0; 10 11 if(m >= 0 ) 12 compare1 = m; 13 else 14 compare1 = (~m)+1;//如果是负数,补码的补码就是源码 15 16 if(n >= 0 ) 17 compare2 = n; 18 else 19 compare2 = (~n)+1; 20 21 result = compare1 ^ compare2;//按位异或 22 //printf("%d\n",result); 23 24 while(result != 0){ 25 26 if(result%2 == 1)count++;//计算有几个1 27 result = result / 2; 28 29 } 30 return count; 31 }
标签:
原文地址:http://www.cnblogs.com/friday92/p/4570302.html