位运算

作者: 韩小禹 | 来源:发表于2020-02-01 18:36 被阅读0次

符号 描述 运算规则

& 与 两个位都为1时,结果为1

| 或 两个位都为0时,结果为0

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

~ 取反 0变1,1变0

按位与运算
与定义:& ,参加运算的两个数据,按二进制位进行“与”运算
运算规则:
两个位都为1时,结果为1
0&0=0, 1&0=0, 0&1=0, 1&1=1

与的用途:
1:清零
    如果想将一个单元清零,即使其全部二进制位都为0,只要与一个各位都为0的数值相与,结果为0

1010 1110
0000 0000
0000 0000

2:取一个数的指定位
    比如取一个数的低4位,如:1010 1110,只需要另找一个数Y,领Y的低4位都为1,如:0000 1111,然后将X于Y相与,其余位不变,即可得到x的指定位

1010 1110
0000 1111
0000 1110

3:判断奇数和偶数
    只要根据最末位是0还是1,为0是偶数,为1是奇数,因此可以用 if  a & 1 == 0  代替  if a % 2 == 0 来判断奇数和偶数

0000 1110 14
0000 1111 15
0000 0001 1

0000 0000 14 & 1 偶数
0000 0001 15 % 1 奇数

按位或运算
或定义:参加运算的两个对象,按二进制位进行“或”运算。
运算规则:
参见运算的两个对象,只要有一个为1,其值为1,
0|0=0, 0|1=1, 1|0=1, 1|1=1

或的用途:
    1:常用来对一些数据的某些位设置为1
    比如将数x=1010 1110的低4位设置为1,只需要找一个数y,另y的低4位为1,其余位为0,即y=0000 1111,然后让x和y进行按位或运算即可

1010 1110
0000 1111
1010 1111

按位异或运算
异或定义: ^ ,两个位相同为0,相异为1
运算规则:
参加运算的两个对象,如果两个相应位相同为0,不同为1
0^0=0, 0^1=1, 1^1=0, 1^0=1
异或的几条性质:
1、交换律
2、结合律 (ab)c == a(bc)
3、对于任何数x,都有 xx=0,x0=x
4、自反性: abb=a^0=a;
a = 7, b = 4
a = 0000 0111
b = 0000 0100

a = 0000 0011 3
b = 0000 0111 7
a = 0000 0100 4

异或的用途:
1:翻转指定位
比如将数 X=1010 1110 的低4位进行翻转,只需要另找一个数Y,令Y的低4位为1,其余位为0,即Y=0000 1111,然后将X与Y进行异或运算(X^Y=1010 0001)即可得到。
翻转低四位,其余位数不变:1010 1110
1010 1110
0000 1111
1010 0001

翻转高四位,其余位数不变:1010 1110
1010 1110
1111 0000
0101 0000

2:与0相异或值不变
1011 1101
0000 0000
1011 1101

3:交换两个数
package main

import "fmt"

func swap(a int, b int) (int, int) {
a ^= b
b ^= a
a ^= b
return a, b
}

func main() {
a := 13
b := 18
a, b = swap(a, b)
fmt.Printf("a = %d, b = %d \n", a, b)
}
//a = 13, b = 18

左移运算符
定义:将一个运算对象的各二进制位全部左移若干位( 左边的二进制位丢弃,右边补0),若左移时舍弃的高位不包含1,则每左移一位,相当于该数乘以2。
0000 0111 7
0000 0111 << 1
0000 1110 14

0000 0111 << 2
0001 1100 28

右移运算符
定义:将一个运算对象的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃,操作数每右移一位,若右移时舍弃的高位不包含1相当于该数除以2.
0001 0010 18
0001 0010 >> 1
0000 1001 9

0001 0010 >> 2
0000 0100 4

1111 0010 242
1111 0010 >> 2
0011 1100 60

相关文章

  • 3、小众运算符の大课堂(一)

    较为简单の位运算符: & 位与运算| 位或运算^ 位异或运算~ 位取反运算 举例: 要做位运算,首先要把数据转...

  • 位运算及其应用

    内容概要: 位运算基本操作 基于位运算的状态压缩 位运算经典应用 位运算解N皇后问题 位运算 符号描述规则&与1&...

  • 位运算及用位运算实现权限控制

    请自行补习位运算相关知识 位运算 位运算示例 权限控制

  • 开发基础随笔之位运算符(Bitwise Operators)

    位运算符,属于算术运算符 按位逻辑运算符: 位移运算符: 位运算符的运算数只能是整数 位移运算符:按位左移 a<<...

  • 强大的位运算符

    位取反运算符 位取反运算符(~)是对所有位的数字进行取反操作位取反运算符.png 位与运算符 位与运算符(&)可以...

  • 位运算

    位运算 1. &:按位与 规律:一假则假任何位上的数和1相&得到的结果还是那个数 2. |:按位或 规律:一真则真...

  • 位运算

    https://leetcode.com/problems/gray-code/description/这个位运算...

  • 位运算

    位运算符比一般的算术运算符速度要快,而且可以实现一些算术运算符不能实现的功能。如果要开发高效率程序,位运算符是必不...

  • 位运算

    1.不用加减乘除做加法 解法:分为三步①各位相加不进位,即先按位异或;②做进位,按位与并左移位;③结果相加,直至没...

  • 位运算

    位运算不仅可以简化某些复杂的操作,而且具有更快的计算速度。典型的应用就是除法,交换两个数值,以及在一个数组中寻找只...

网友评论

      本文标题:位运算

      本文链接:https://www.haomeiwen.com/subject/wupxxhtx.html