位运算相关面试题

位运算的相关面试题:
面试题一:在Excel2003中,用A表示第一列,B表示第二列...........Z表示第26列,AA表示第27列,AB表示第28列..............以此类推。请写出一个函数,输入字母表示的列好编码,输出她是第几列。
思路:把十进制数字用A-Z表示成二十六进制。
int SearchRow(char* str,int length)//strlen
{ 
	//把A-Z表示成26进制;数组下标为所代表的值。
	char ch[] = {'0','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};//多写一个‘0’是为了让字母分别匹配他们的值,
	char* p1 = str;
	char* p2 = str+length-1;
	double count = 0.0;
	int row = 0;
	while(p1  <= p2)
	{
	  for(int i=0;i<sizeof(ch)/sizeof(ch[0]);++i)
	  {
		  if(*p2 == ch[i])
		  {
			row += i*pow(26.0,count);
			count++;
			p2--;
			break;
		  }
	  }
	}
	return row;
}
面试题二:二进制中1的个数
题目:请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例如把9表示成二进制位1001,有两位是1.因此输入9该函数输出2。
思路:对于整数和整数减一进行位与运算,直到为0,进行几次位与运算就有几个位为1.
代码
int FindNumBitIs1(int num)
{
	int count = 0;
	while(num != 0)
	{
		count++;
		num = num &(num - 1);
	}
	return count;
}
面试题三:用一条语句判断一个整数是不是2的整数次方。
思路:当一个整数为2的整数次方的时候,二进制序列中只有一位为1.
代码:
bool Is2IntegerPower(int num)
{
	int count = 0;
	while(num != 0)
	{
		count++;
		num &= num-1; 
	}
	if(count == 1)
		return true;
	return false;
}
面试题四:输入两个整数m和n,计算需要改变m的额二进制表示中的多少位,才能得到n.
思路:(1)求m和n的异或结果;
           (2)求m和n异或结果中1的位数;即可得到结果。
代码:
int BitOfInt1ToInt2(int m,int n)
{
	int result = m^n;
	int count = 0;
	while(result)
	{
		count++;
		result &= (result -1);
	}
	return count;
}
小结:把一个整数减1之后再与原来的数做位“与运算”,得到的结果相当于把整数二进制表示中最右边的1变为0.


作者水平有限,如有问题,请留言,谢谢!!
  • 4
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值