位运算可以实现哪些功能

位运算可以实现哪些功能

许多时候,我们为了减少算法的时间复杂度,都是推荐使用位运算,今天我们整理一下位运算可以实现哪些功能。

1. 乘除2

左移1位乘以2,左移n位乘以2^n;

右移1位除以2,右移n位除以2^n;

举个例子:

#include<iostream>
using namespace std; 

int main()
{
	int a = 16;
	int b = 25; 

	//乘除2
	cout<<(b<<1)<<' '<<(a>>1)<<endl; 

	return 0;
}

2. 判断奇偶数

用到位运算中的按位与,和1按位与。

如下:

#include<iostream>
using namespace std; 

int main()
{
	int a = 16;
	int b = 25; 

	// 判断奇偶数
	if(a & 1)
		cout<<"Odd"<<endl;
	else
		cout<<"Even"<<endl; 

	return 0;
}

3. 取余运算

还是使用按位与运算符,只不过不再是和1按位与了。

#include<iostream>
using namespace std; 

int main()
{
	int a = 16;
	int b = 25; 

	// 取余
	cout<<(a & 3)<<endl;  // 除以4的余数
	cout<<(a & 7)<<endl;  // 除以8的余数
	cout<<(a & 8)<<endl;  // 无效,只能运算2的次幂的余数

	return 0;
}

分析:注意这个方法只能计算2的次幂的余数,而且参加按位与的只能是2^n-1,因为这些数的二进制形式全是1.

4. 求相反数

使用按位取反运算符。

	//求相反数
	cout<<(~a+1)<<endl; 

5. 求绝对值

使用异或运算符(^)

#include<iostream>
using namespace std; 

int main()
{
	int a = -36;
	int b = 25; 

	// 绝对值
	int tmp = a>>31;  // /a大于等于0时tmp为0,a小于0时tmp为-1
	int A = (a^tmp)-tmp;
	cout<<A<<endl; 

	return 0;
}

这些基本的数学运算都是可以通过为运算符来实现,时间复杂度都比较低,以后常用。

时间: 2024-07-29 08:28:57

位运算可以实现哪些功能的相关文章

Python这些位运算的妙用,绝对让你大开眼界

位运算的性能大家想必是清楚的,效率绝对高.相信爱好源码的同学,在学习阅读源码的过程中会发现不少源码使用了位运算.但是为啥在实际编程过程中应用少呢?想必最大的原因,是较为难懂.不过,在面试的过程中,在手写代码过程中,写出一两个位运算的代码,还会让面试官眼前一亮的. 位运算常用的运算符包括&(按位与), | (按位或),~(按位非),^(按位异或),<< (有符号左移位) ,>>(有符号右移位). 下面用几个例子说明其应用,希望对你有所启发. 1.判断奇数还是偶数 通常判断奇数

位运算之 C 与或非异或

位运算比较易混: 位运算之 C 与或非异或 与运算:& 两者都为1为1,否则为0 1&1=1,  1&0=0,  0&1=0,  0&0=0 或运算:| 两者都为0为0,否则为1 1|1 = 1,  1|0 = 1,  0|1 = 1, 0|0 = 0 非运算:~ 1取0,0取1 ~1 = 0, ~0 = 1 ~(10001) = 01110 异或运算:^ 两者相等为0,不等为1(易混淆) 1^1=0, 1^0=1, 0^1=1, 0^0=0 位移操作符:<&

C位运算笔记(根据网上内容整理)1

什么是位运算?    程序中的所有数在计算机内存中都是以二进制的形式储存的.位运算说穿了,就是直接对整数在内存中的二进制位进行操作.由于位运算直接对内存数据进行操作,不需要转成十进制,因此处理速度非常快. 各种位运算的使用 === 1. and运算 ===(同真为真) and运算通常用于二进制取位操作,例如一个数 and 1的结果就是取二进制的最末位.这可以用来判断一个整数的奇偶,二进制的最末位为0表示该数为偶数,最末位为1表示该数为奇数. === 2. or运算 ===(一真为真) or运算通

C语言位运算

在计算机程序中,数据的位是可以操作的最小数据单位,理论上可以用“位运算”来完成所有的运算和操作.一般的位操作是用来控制硬件的,或者做数据变换使用,但是,灵活的位操作可以有效地提高程序运行的效率.C语言提供了位运算的功能, 这使得C语言也能像汇编语言一样用来编写系统程序. 位运算符C语言提供了六种位运算符: & 按位与 | 按位或 ^ 按位异或 ~ 取反 << 左移 >> 右移 位运算 1.位与&

javascript中的类型转换(进制转换|位运算)

1:parseInt(string) : 这个函数的功能是从string的开头开始解析,返回一个整数 parseInt("123hua"); //输出 123 parseInt("123"); //输出 123 parseInt("12.3"); //输出 12 parseInt("hua"); //输出 Nan 2:另外parseInt()方法还有其他模式,就是可以把二进制.八进制.十六进制或其他任何进制的字符串转换成整数

C入门---位运算

程序中的所有数在计算机内存中都是以二进制的形式储存的.位运算直接对整数在内存中的二进制位进行操作.由于位运算直接对内存数据进行操作,不需要转成十进制,因此处理速度非常快. (1),与(&)运算 "&"运算通常用于二进制取位操作,例如一个数 & 1 的结果就是取二进制的最末位.这可以用来判断一个整数的奇偶,二进制的最末位为0表示该数为偶数,最末位为1表示该数为奇数. (2),或(|)运算 "|"运算通常用于二进制特定位上的无条件赋值,例如一个数

对硬件编程中常用的位运算概述

位运算就是将对应的数值转化为二进制然后按位进行相应的运算.(好吧,这个概念是我自己的理解...) 下面的叙述指示结合个人的经历与理解,肯定是不够全面.甚至不够准确的,只是希望抛砖引玉,同时也作为自己对位运算这一块的一个简单总结. 位运算主要包括:位与(&).位或(|).位取反(~).位异或(^).左移(<<).右移(>>)六种下面分别介绍. 1.  位与(&). 这个和逻辑运算符 与(&&) 是不是长得像?他们的功能也异曲同工!运算的两位同时为1时结

嵌入式linux C语言(一)——位运算的使用

嵌入式linux C语言(一)--位运算的使用 ARM是内存与IO统一编址,SoC中有很多控制寄存器,通过对这些寄存器进行位运算对这些控制寄存器进行设置,进而控制外设功能.在修改寄存器某些位的过程中不能修改其他的位. 一.位运算基础 C语言基本的位操作符有与.或.异或.取反.左移.右移六种位运算符.如下表所示: 符号 描述 运算规则 & 与 两个位都为1时,结果才为1 | 或 两个位都为0时,结果才为0 ^ 异或 两个位相同为0,相异为1 ~ 取反 0变1,1变0 << 左移 各二进位

Java 位运算

一,Java 位运算 1.表示方法: 在Java语言中,二进制数使用补码表示,最高位为符号位,正数的符号位为0,负数为1.补码的表示需要满足如下要求. (l)正数的最高位为0,其余各位代表数值本身(二进制数). (2)对于负数,通过对该数绝对值的补码按位取反,再对整个数加1. 2.位运算符 位运算表达式由操作数和位运算符组成,实现对整数类型的二进制数进行位运算.位运算符可以分为逻辑运算符(包括~.&.|和^)及移位运算符(包括>>.<<和>>>). 1)左