当前位置:网站首页>Exotic curiosity-a solution looking - bit operations
Exotic curiosity-a solution looking - bit operations
2022-08-02 15:33:00 【Old stubborn and cute】
位运算概览
符号 | 描述 | 运算规则 | 例子 |
---|---|---|---|
& | 与 | 两个位都为1时,结果才为1,否则结果为0 | 3&5=0011&0101=0001=1 |
或 | 参加运算的两个对象只要有一个为1,其值为1. | ||
^ | 异或 | 两个位相同为0,相异为1 | 3^ 5=0011^0101=1001=9 |
~ | 取反 | 0变1,1变0 | |
<< | 左移 | 各二进位全部左移若干位,高位丢弃,低位补0 | 1010 1110<<2=1011 1000 |
>> | 右移 | 各二进位全部右移若干位,对无符号数,高位补0,有符号数,各编译器处理方法不一样,有的补符号位(算术右移),有的补0(逻辑右移) |
注意:负数按补码形式参加按位与运算.
1.与运算符(&)
与运算的用途 | |
---|---|
取一个数的指定位 | 比如取数 X=1010 1110 的低4位,只需要另找一个数Y,令Y的低4位为1,其余位为0,即Y=0000 1111,然后将X与Y进行按位与运算(X&Y=0000 1110)即可得到X的指定位. |
清零 | 如果想将一个单元清零,即使其全部二进制位为0,只要与一个各位都为零的数值相与,结果为零. |
判断奇偶 | 只要根据最未位是0还是1来决定,为0就是偶数,为1就是奇数.因此可以用if ((a&1)==0)代替if (a%2 == 0)来判断a是不是偶数. |
2.或运算符(|)
或运算的用途 | |
---|---|
常用来对一个数据的某些位设置为1 | 比如将数 X=1010 1110 的低4位设置为1,只需要另找一个数Y,令Y的低4位为1,其余位为0,即Y=0000 1111,然后将X与Y进行按位或运算(X |
3.异或运算符(^)
异或的几条性质:
1、交换律
2、结合律 (a^ b)^ c == a^ (b^c)
3、对于任何数x,都有 xx=0,x0=x
4、自反性: a^ b^ b=a^0=a;
异或运算的用途 | |
---|---|
翻转指定位 | 比如将数 X=1010 1110 的低4位进行翻转,只需要另找一个数Y,令Y的低4位为1,其余位为0,即Y=0000 1111,然后将X与Y进行异或运算(X^Y=1010 0001)即可得到. |
与0相异或值不变 | 例如:1010 1110 ^ 0000 0000 = 1010 1110 |
交换两个数 | 交换a与b的值,a ^= b;b ^= a; a ^= b; |
void Swap(int& a, int& b)
{
if (a != b)
{
a ^= b;
b ^= a;
a ^= b;
}
}
4.取反运算符 (~)
取反运算的用途 | |
---|---|
使一个数的最低位为零 | 使a的最低位为0,可以表示为:a &~ 1.~1的值为 1111 1111 1111 1110,再按"与"运算,最低位一定为0.因为“ ~”运算符的优先级比算术运算符、关系运算符、逻辑运算符和其他运算符都高. |
5.左移运算符(<<)
定义:将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0).
若左移时舍弃的高位不包含1,则每左移一位,相当于该数乘以2.
6.右移运算符(>>)
定义:将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃.
例如:a=a>>2 将a的二进制位右移2位,左补0 或者 左补1得看被移数是正还是负.
操作数每右移一位,相当于该数除以2.
注意
不同长度的数据进行位运算:如果两个不同长度的数据进行位运算时,系统会将二者按右端对齐,然后进行位运算.
以“与运算”为例说明如下:我们知道在C语言中long型占4个字节,int型占2个字节,如果一个long型数据与一个int型数据进行“与运算“,右端对齐后,左边不足的位依下面三种情况补足:
1)如果整型数据为正数,左边补16个0.
2)如果整型数据为负数,左边补16个1.
3)如果整形数据为无符号数,左边也补16个0.
边栏推荐
- 网络安全抓包
- 奇技淫巧-位运算
- Introduction to in-order traversal (non-recursive, recursive) after binary tree traversal
- What is Win10 God Mode for?How to enable God Mode in Windows 10?
- In-depth understanding of Golang's Map
- 第三十二章:二叉树的存储与遍历
- MATLAB绘图函数plot详解
- 7.Redis
- cmake配置libtorch报错Failed to compute shorthash for libnvrtc.so
- Doubled and sparse tables
猜你喜欢
TCP三次握手、四次挥手
A clean start Windows 7?How to load only the basic service start Windows 7 system
Based on the matrix calculation in the linear regression equation of the coefficient estimates
轻量化AlphaPose
Win10 cannot directly use photo viewer to open the picture
【系统设计与实现】基于flink的分心驾驶预测与数据分析系统
cmake configure libtorch error Failed to compute shorthash for libnvrtc.so
win10怎么设置不睡眠熄屏?win10设置永不睡眠的方法
How to solve Win11 without local users and groups
软件测试基础知识(背)
随机推荐
Detailed explanation of Golang garbage collection mechanism
KiCad Common Shortcuts
Do Windows 10 computers need antivirus software installed?
Mysql connection error solution
Installation and configuration of Spark and related ecological components - quick recall
How to set the win10 taskbar does not merge icons
General syntax and usage instructions of SQL (picture and text)
win10系统更新错误代码0x80244022怎么办
LeetCode2 电话号码的字母组合
编译error D8021 :无效的数值参数“/Wextra” cl command line error d8021 invalid numeric argument ‘/wextra‘
How to add a one-key shutdown option to the right-click menu in Windows 11
质数相关问题-小记
MATLAB绘图函数fplot详解
Cmd Markdown 公式指导手册
jest测试,组件测试
Win11 computer off for a period of time without operating network how to solve
Win10 Settings screen out from lack of sleep?Win10 set the method that never sleep
5.事务管理
Configure clangd for vscode
模板系列-并查集