编程基础---位运算符及其应用

简介: 编程基础---位运算符及其应用

一元运算符

与(&)

概念

两个位都为1时,结果才为1

例:0&0=0 0&1=0 1&0=0 1&1=1

用处

a.清零

只要与一个各位都为零的数值相与,结果为零。

b.判断奇偶

判断最后一位是0或1来判断是奇是偶。

偶(a & 1) == 0

奇(a & 1) == 1

c.去一个数的指定位

若是要取一个数的后四位,只需要利用一个后四位数均为1的数相与

或(|)

概念

两个位都为0时,结果才为0

例:0|0=0 0|1=1 1|0=1 1|1=1

用处

a.将某些位数转为1

将某个数与想转为一的位设置位1的数取或可以实现将该数的某些位数转成1

异或(^)

概念

两个位相同为0,相异为1

例:0^0=0 0^1=1 1^0=1 1^1=0

用处

a.翻转指定位

将要翻转的数的位找一个该位为1其与为0的数异或

b.交换两个数

void Swap(int &a, int &b){
   if (a != b){
     a ^= b;
     b ^= a;
     a ^= b;
   }
}

c.判断是否同号

a^b > 0 同号

a^b < 0 异号

取反(~)

概念

0变1,1变0

例:0^0=0 0^1=1 1^0=1 1^1=0

用处

a.将一个数最低位转为0

使a的最低位为0,可以表示为:a & 1。1的值为 1111 1111 1111 1110,再按"与"运算,最低位一定为0

左移(<<)

概念

各二进位全部左移若干位,高位丢弃,低位补0

例:1001<<1 = 10010

用处

a.可实现*2的操作

右移(>>)

概念

各二进位全部右移若干位,对无符号数,高位补0,有符号数,各编译器处理方法不一样,有的补符号位(算术右移),有的补0(逻辑右移)

例:1001>>1 = 100

用处

a.可实现/2的操作

复合运算符

&= 例:a&=b 相当于 a=a&b

|= 例:a|=b 相当于 a=a|b

>>= 例:a>>=b 相当于 a=a>>b

<<= 例:a<<=b 相当于 a=a<<b

^= 例:a^=b 相当于 a=a^b

参考文章:菜鸟教程位运算


相关文章
Python语言基础---选择判断循环结构详解
Python语言基础---选择判断循环结构详解
|
5月前
|
算法 Java
Java程序设计基础——位运算符简介
Java程序设计基础——位运算符简介
|
5月前
|
Java 数据安全/隐私保护
Java基础篇----算术魔术大揭秘【面试题拓展】
Java基础篇----算术魔术大揭秘【面试题拓展】
50 1
|
5月前
|
Java
基本概念【算术、 关系、逻辑、位、字符串、条件、优先级等运算符】(三)-全面详解(学习总结---从入门到深化)
基本概念【算术、 关系、逻辑、位、字符串、条件、优先级等运算符】(三)-全面详解(学习总结---从入门到深化)
65 0
|
算法 网络协议 测试技术
Go运算操作符全解与实战:编写更高效的代码!1
Go运算操作符全解与实战:编写更高效的代码!
95 0
|
存储 算法 安全
Go运算操作符全解与实战:编写更高效的代码!2
Go运算操作符全解与实战:编写更高效的代码!2
81 0
|
存储 编译器 C语言
从零学习C语言---操作符详解
本章介绍C语言中的操作符。
从零学习C语言---操作符详解
|
Java 编译器 C语言
成长之路---C语言笔记(运算符与表达式)
成长之路---C语言笔记(运算符与表达式)
69 1
运算符(较为基础,基础篇)(二)
运算符(较为基础,基础篇)(二)
59 0
运算符(较为基础,基础篇)(一)
运算符(较为基础,基础篇)(一)
62 0