两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同
发布时间:2020-12-14 04:25:14 所属栏目:大数据 来源:网络整理
导读:思路:利用用算加右移的方法来提取二进制中的每一位数,然后进行比较,查看是否相同。 1 #includestdio.h 2 #includestdlib.h 3 4 int main() 5 { 6 // i=1999 - 022222001111 7 // j=2299 - 100022222011 8 int i = 0 ,j = 0 ; 9 int a = 0 ,b = 0 ,num = 0
思路:利用&用算加右移的方法来提取二进制中的每一位数,然后进行比较,查看是否相同。 1 #include<stdio.h>
2 #include<stdlib.h>
3
4 int main() 5 { 6 //i=1999 -> 022222001111 7 //j=2299 -> 100022222011
8 int i = 0,j = 0; 9 int a = 0,b = 0,num = 0; 10 //a与b分别是i与j二进制中的最后一位的数字,num 为位(bit)不同的个数
11 printf("请输入您要比较的两个数字:n"); 12 scanf("%d %d",&i,&j); 13 while (i != 0 || j != 0) 14 { 15 //这里查看整数i的二进制的最后一位并赋值给a 16 //每次查看结束就右移一位改变最后一位的数值
17 if ((i & 1) == 1) 18 { 19 a = 1; 20 i = i >> 1; 21 } 22 else
23 { 24 a = 0; 25 i = i >> 1; 26 } 27 //这里查看整数j的二进制的最后一位并赋值给b 28 //每次查看结束就右移一位改变最后一位的数值
29 if ((j & 1) == 1) 30 { 31 b = 1; 32 j = j >> 1; 33 } 34 else
35 { 36 b = 0; 37 j = j >> 1; 38 } 39 //最后比较a和b的值,不一样则++num
40 if (a != b) 41 { 42 ++num; 43 } 44
45 } 46 printf("%d",num); 47
48 return 0; 49
50 }
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |