查看两个int数的二进制有几位不同

题目:查看两个int(32位)数的二进制有几位不同。

分析:要理解该题目的意思,就要明白C语言中关于位的一些操作符。

1)“&",按位与操作符,从低位到高位对两个数的每位进行与操作,如1001&1101=1001,都为1则取1;

2)"|",按位或操作符,有一个是1就取1;

3)"^",异或,不同则取1;

4)"~",非操作符,用来对一个二进制数按位取反;

5)"<<",左移操作符,右边补0;

6)">>",右移操作符,对于无符号数,左边补0

知道了这么多先验知识,就可以美美的操作这个题,首先用一个异或,可以得到两数的不同,i的作用是每次向左移,查看该位置是否是1,k是计数,根本就不用转换成二进制,很好理解!

#include<stdio.h>

void checkDifference(int a,int b)
{
	int k=0,i;
	for(i=0;i<32;i++)
	{
		if((a^b)&(1<<i))
		{
			k++;
			printf("第%d位不同!\n",i);
		}
	}
	printf("共%d位不同\n",k);
}

int main()
{
	int a,b;
	while(scanf("%d %d",&a,&b)!=EOF)
	{
		checkDifference(a,b);
	}
	return 0;
}
时间: 2024-08-29 13:13:23

查看两个int数的二进制有几位不同的相关文章

java实现两个int数交换

普通方法,进阶方法,大神方法 1 @Test 2 public void test3(){ 3 int m = 5; 4 int n = 12; 5 6 //要求m和n交换位置 7 System.out.println("m=" + m + " n=" + n);//m=5 n=12 8 9 //方法一:定义临时变量 10 //优点:操作简单,缺点:需定义临时变量,内存消耗较大 11 int temp = m; 12 m = n; 13 n = temp; 14 S

使用OC语言编写两个超大数相乘或相加的算法的思路和超大正整数相乘的代码

正文: 在编程中,无论是OC还是C亦或是C++语言,所声明的整数变量都会在内存中占有固定的存储空间,而这些存储空间都是固定的. 比如我们知道的int.long.short.unsigend int.unsigend long.unsigend long long等等,都有固定的存储空间,而哪怕是64位系统下的变量unsigend long long,能存储的最大范围只有1844674407370955161. 下边复习一下基础类型的存储范围以及所占字节: 编程语言的基础类型速查表 char -1

【c语言】将一个数的二进制序列逆序,然后输出逆序之后的二进制序,所对应的数

// 将一个数的二进制序列逆序,然后输出逆序之后的二进制序,所对应的数 #include <stdio.h> // 从原数拿出最低位,放到mid中,mid左移,原数右移 int reverse(int a) { int mid = 0; int bit; int n = 31; for (; n > 0; --n) { bit = a & 1; mid |= bit; mid <<= 1; a >>= 1; } return mid; } int main

Linux查看连接数,并发数

Linux查看连接数,并发数 博客分类: 小记 linux 软连接 Bat代码   ln -s /home/ictfmcg/data/photo /var/jtnd/data/photo tomcat 6的Connector配置如下 Xml代码   <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"

Smarty格式化数字为INT数

<? require("setup.php"); define('PAGETITLE','pagtitle'); function insert_top($lid,$sid) { echo "insert function"; } $smarty=new SmartyRebuild(); $smarty->assign('name','Linux'); $smarty->assign('title','在线有有要有和蔼是是非非要要'); $smar

如何查看服务器CPU核心数和线程数

知道服务器CPU型号,那么我们如何在服务器里面查看服务器CPU核心数和线程数呢? 步骤: 先用鼠标右键点击屏幕最下方的任务栏空白处.会弹出一个菜单. 在菜单中用鼠标左键点选“启动任务管理器”. 点击任务管理器的“性能”选项. 在“性能”选项的“cpu使用记录”项中有几个方框就说明cpu有几个线程. cpu线程数不一定等于cpu的核心数,因为有些cpu采用了超线程技术,一个核心可以有两个线程.如果想查看cpu的核心数可以安装一个CPU-Z软件,打开后就可以看见有几个核心和线程了. PS:超线程处理

int类型变量以二进制形式输出

C语言int类型(4字节)以二进制形式输出: #include<stdio.h> void intobit(int num)/*num是要以二进制形式输出的int值将二进制数据逐个置1,在右移,依次实现逐个输出*/{ int tnum=num; int i; for(i=31;i>=0;i--) { int tmpa=tnum; tmpa=tnum&(1<<i); ((i+1)%8==0&&i!=31)?printf(" %d",t

【C语言】编写一个函数,传入a,b两个int类型的变量,返回两个值的最大公约数。

/*编写一个函数,传入a,b两个int类型的变量,返回两个值的最大公约数. 例如:输入传入(0 , 5)函数返回5,传入(10 , 9)函数返回1,传入(12 , 4)函数返回4 */ #include <stdio.h> int yue(int a,int b) { int temp; int n; if (a>b) { temp=a; a=b; b=temp; } n=a; if(a==0) return b; else while(n!=0) { if( a%n==0 &&

Java对两个int类型求百分比的方法

今天制作一个统计报表导出功能,把Java对两个int类型求百分比的处理方法在博客整理一下,给后来有需要的人提供帮助!顺便纪念一下项目的统计功能基本没有问题,就差导出了! 现将代码整理如下: int diliverNum=3;//举例子的变量 int queryMailNum=9;//举例子的变量 // 创建一个数值格式化对象 NumberFormat numberFormat = NumberFormat.getInstance(); // 设置精确到小数点后2位 numberFormat.se