`
haierboos
  • 浏览: 436595 次
文章分类
社区版块
存档分类
最新评论

两个常见位操作面试题 不用加减乘除运算符计算两数之和及a=b*3

 
阅读更多

《两个常见位操作面试题不用加减乘除运算符计算两数之和及a=b*3

地址:http://blog.csdn.net/morewindows/article/details/8710737转载请标明出处,谢谢。

欢迎关注微博:http://weibo.com/MoreWindows

上一篇《位操作基础篇之位操作全面总结》http://blog.csdn.net/morewindows/article/details/7354571)介绍了:

一.位操作基础,用一张表描述位操作符的应用规则并详细解释。

二.常用位操作小技巧,有判断奇偶、交换两数、变换符号、求绝对值。

三.位操作与空间压缩,针对筛素数进行空间压缩。

四.位操作的趣味应用,列举了位操作在高低位交换、二进制逆序、二进制中1的个数以及缺失的数字这4种趣味应用。

现在再来介绍两个位操作习题,这两个习题也常常在各大IT公司的笔试题面试题中出现。

1.不用加减乘除运算符计算两个数字之和

2.不用加减乘除运算符计算a = b * 3

首先这两个题目其实是很相关的,要计算

a = b * 3就是计算a = b *2 + ba = b << 1 + b

因此只要解决了不用加减乘除运算符计算两个数字之和,那么不用加减乘除运算符计算a = b * 3也就迎刃而解了。那么怎么不用加减乘除运算符计算两个数字之和了?我们知道在计算5 + 9时,首先不进位的话 5 + 9 = 45 + 9的进位为1,然后和就是1 * 10 + 4 = 14。同理放到二进制中也可以采用这样的方法。

运算步骤如下://By MoreWindows( http://blog.csdn.net/MoreWindows )

设有a = 3b = 6

a    0011

b    0110

不进位和 0101 = 5

进位 0010 = 2

因此 a + b就变成了5 + 2 << 1

然后有

5    0101

2<<1   0100

不进位和 0001 = 1

进位 0100 = 4

因此 a + b就变成了1 + 4 << 1

然后有

1    0001

4<<1   1000

不进位和 1001 = 9

进位 0000 = 0

当时进位为0时,不进位和为9a + b之和。

代码不难写出:

//两个常见位操作面试题 不用加减乘除运算符计算两数之和及a=b*3
//http://blog.csdn.net/morewindows/article/details/8710737
//By MoreWindows( http://blog.csdn.net/MoreWindows )
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int BitAdd(int a, int b)
{
	int nCarry = a & b;      // 进位
	int nSumNoCarry = a ^ b; // 非进位
	if (nCarry != 0)
		return BitAdd(nSumNoCarry, nCarry << 1);
	else
		return nSumNoCarry;
}
int BitMultiplication3(int a)
{
	return BitAdd(a << 1, a);
}
int main()
{
	printf("   两个常见位操作面试题 不用加减乘除运算符计算两数之和及a=b*3\n");
	printf(" - http://blog.csdn.net/morewindows/article/details/8710737 -\n");
	printf(" - By MoreWindows( http://blog.csdn.net/MoreWindows - \n\n");


	srand(time(NULL));
	const int MAXNUMBER = 100;
	int a = rand() % MAXNUMBER, b = rand() % MAXNUMBER;

	printf("\n      ------------------ 位操作之加法 --------------------\n");
	printf(" %d + %d = %d\n", a, b, BitAdd(a, b));

	printf("\n      ------------------- 位操作之a = b * 3 -------------------\n");
	printf(" %d * 3 = %d\n", a, BitMultiplication3(a));
	return 0;
}

运行结果如下所示:


《两个常见位操作面试题不用加减乘除运算符计算两数之和及a=b*3

地址:http://blog.csdn.net/morewindows/article/details/8710737转载请标明出处,谢谢。

欢迎关注微博:http://weibo.com/MoreWindows

分享到:
评论

相关推荐

    java基础面试题不用加减乘除法做加法

    java基础面试题不用加减乘除法做加法本资源系百度网盘分享地址

    wind0926#JAVA2020#面试题65. 不用加减乘除做加法1

    面试题65. 不用加减乘除做加法题目链接面试题65. 不用加减乘除做加法题目描述写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。题

    Java运算符常见面试题及答案

    Java运算符是编写Java程序时必不可少的元素之一,也是面试中常见的考点。本文提供了二十道常见的面试题,涵盖了Java运算符的类型、功能、优先级、特性等方面的知识点。这些问题旨在考察候选人对Java运算符的理解和...

    常见软件测试面试题常见软件测试面试题

    常见软件测试面试题常见软件测试面常见软件测试面试题常见软件测试面试题常见软件测试面试题常见软件测试面试题常见软件测试面试题试题

    c++面试题面试题面试题面试题

    c++面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试...

    vue常见面试题.zip vue常见面试题.zip

    vue常见面试题.zip vue常见面试题.zipvue常见面试题.zip vue常见面试题.zipvue常见面试题.zip vue常见面试题.zipvue常见面试题.zip vue常见面试题.zipvue常见面试题.zip vue常见面试题.zipvue常见面试题.zip vue常见...

    计算机视觉算法工程师常见面试题1.pdf

    计算机视觉算法工程师常见面试题1.pdf

    常见C++面试题(特别适合找工作面试计算机方向者)

    常见的C++面试题目,实用 特别适合找工作面试计算机方向者

    java常见面试题汇总

    java常见面试题汇总 java常见面试题汇总 java常见面试题汇总 java常见面试题汇总 java常见面试题汇总 java常见面试题汇总 java常见面试题汇总 java常见面试题汇总 java常见面试题汇总 java常见面试题汇总 java常见...

    mysql常见面试题汇总

    mysql常见面试题汇总,mysql常见面试题汇总 mysql常见面试题汇总,mysql常见面试题汇总 mysql常见面试题汇总,mysql常见面试题汇总 mysql常见面试题汇总,mysql常见面试题汇总 mysql常见面试题汇总,mysql常见面试题...

    大数据常见面试题2022

    大数据常见面试题2022大数据常见面试题2022大数据常见面试题2022大数据常见面试题2022大数据常见面试题2022大数据常见面试题2022大数据常见面试题2022大数据常见面试题2022大数据常见面试题2022大数据常见面试题2022...

    cobol常见面试题

    cobol常见面试题 cobol常见面试题

    计算机专业面试题及答案

    计算机专业面试题及答案 计算机专业面试题及答案 计算机专业面试题及答案 计算机专业面试题及答案 计算机专业面试题及答案

    JAVA面试题

    题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。 题目:将一个正整数分解质因数。例如:输入...

    springboot常见22个面试题及答案.pdf

    springboot常见22个面试题及答案.pdfspringboot常见22个面试题及答案.pdfspringboot常见22个面试题及答案.pdfspringboot常见22个面试题及答案.pdfspringboot常见22个面试题及答案.pdfspringboot常见22个面试题及答案...

    vc+常见+面试题集

    vc+常见+面试题集

    计算机常见算法面试题

    各大名企常见面试题,在网上搜集整理的,很不错的资源。希望要去面试的人下下来看看

    vue常见面试题 面试题.docx

    vue常见面试题 面试题.docx

    几个常见的C语言面试题分析

    几个常见的C语言面试题分析 几个常见的C语言面试题分析

Global site tag (gtag.js) - Google Analytics