四、与运算(&)

    运算规则:

    0&0=0;0&1=0;1&0=0;1&1=1

    即:两个同时为1,结果为1,否则为0

    例如:3 & 5

    十进制3转为二进制的补码为:0000 0011

    十进制5转为二进制的补码为:0000 0101

    结果就是:0000 0001 转为十进制:+1

    即:3 & 5 = 1

    又例如:-2 & 2

    正数和负数在现代计算机里一般用补码参与运算。

    十进制-2的补码为:1111 1110

    十进制 2的补码为:0000 0010

    通过 &计算结果为:0000 0010 转为十进制:+2

    即:-2 & 2 = 2

    又例如:-2 & -2

    十进制-2的补码为:1111 1110

    十进制-2的补码为:1111 1110

    通过 &计算结果为:1111 1110

    首先看最高位符合位是1,说明这是一个负数的补码表示。

    把它转换成原码,符合位不变,其它位取反,最后再加1,得到原码为:1000 0010 转为十进制就是:-2

    即:-2 & -2 = -2

    五、或运算(|)

    运算规则:

    0|0=0; 0|1=1; 1|0=1; 1|1=1;

    即 :参加运算的两个对象,一个为1,其值为1。

    例:2 | 4

    2的补码为:0000 0010

    4的补码为:0000 0100

    通过 | 运算结果为:0000 0110 转为十进制:+6

    即:2 | 4 = 6

    例:6 | 8

    6的补码为:0000 0110

    8的补码为:0000 1000

    通过 | 运算结果为:0000 1110 转为十进制:+14

    即:6 | 8 = 14

    例:2 | -2

    +2的补码为:0000 0010

    -2的补码为:1111 1110

    通过 | 运算结果为:1111 1110

    首先看最高位符合位是1,说明这是一个负数的补码表示。

    把它转换成原码,符合位不变,其它位取反,最后再加1,得到原码为:1000 0010 转为十进制就是:-2

    即:2 | -2 = -2

    例:-2 | -4

    -2的补码为:1111 1110

    -4的补码为:1111 1100

    通过 | 运算结果为:1111 1110

    首先看最高位符合位是1,说明这是一个负数的补码表示。

    把它转换成原码,符合位不变,其它位取反,最后再加1,得到原码为:1000 0010 转为十进制就是:-2

    即:-2 | -4 = -2

    六、非运算(~)

    非运算即取反运算(包括符合位),在二进制中1变0,0变1。

    例:~1

    1的补码为:0000 0001

    ~1结果为:1111 1110

    首先看最高位符合位是1,说明这是一个负数的补码表示。

    把它转换成原码,符合位不变,其它位取反,最后再加1,得到原码为:1000 0010 转为十进制就是:-2

    即:~1 = -2

    例:~-1

    -1的补码为:1111 1111

    ~-1结果为:0000 0000 转为十进制:+0

    即:~-1 = 0

    七、异或运算(^)

    运算规则:

    0^0=0; 0^1=1; 1^0=1; 1^1=0;

    即:参加运算的两个对象,如果两个位为“异”(值不同),则该位结果为1,否则为0。相异为1,相同为0。

    例:3^5

    3的补码为:0000 0011

    5的补码为:0000 0101

    通过 ^ 运算结果为:0000 0110 转为十进制:+6

    即:3^5 = 6

    例:-2^4

    -2的补码为:1111 1110

    4的补码为:0000 0100

    通过 ^ 运算结果为:1111 1010

    首先看最高位符合位是1,说明这是一个负数的补码表示。

    把它转换成原码,符合位不变,其它位取反,最后再加1,得到原码为:1000 0110 转为十进制就是:-6

    即:-2^4 = -6

    八、位运算

    1、<<左移运算符(此处以1个字节为例)

    将一个运算对象的各二进制位全部左移若干位(左边的二进制丢弃,右边补0)

    例:1 << 1

    1的补码为:0000 0001

    左移1位后:0000 0010 转为十进制:+2

    即:1<<1 = 2

    例:1 << 2

    1的补码为:0000 0001

    左移2位后:0000 0100 转为十进制:+4

    即:1<<2 = 4

    例:-1<<1

    -1的补码为:1111 1111

    左移1位后:1111 1110

    首先看最高位符合位是1,说明这是一个负数的补码表示。

    把它转换成原码,符合位不变,其它位取反,最后再加1,得到原码为:1000 0010 转为十进制就是:-2

    即:-1<<1 = -2

    例:-5<<2

    -5的补码为:1111 1011

    左移2位后:1110 1100

    首先看最高位符合位是1,说明这是一个负数的补码表示。

    把它转换成原码,符合位不变,其它位取反,最后再加1,得到原码为:1001 0100 转为十进制就是:-20

    即:-5<<2 = -20

    注意:以1个字节为例,-5左移5位后最高位就变成了0,结果就会是正数了。

    PS:对于左移,直观的理解为,对于正数来说,左移相当于乘以2(但效率比乘法高);对于负数来说,没有直观的理解,因为它是用补码参与运算。

    2、>>右移运算符(此处以1个字节为例)

    将一个运算对象的各二进制位全部右移若干位,正数左补0,负数左补1。

    例:4>>2

    4的补码为:0000 0100

    右移2位后:0000 0001 转为十进制就是:+1

    即:4>>2 = 1

    例:-14>>2

    -14的补码为:1111 0010

    右移2位后:1111 1100

    首先看最高位符合位是1,说明这是一个负数的补码表示。

    把它转换成原码,符合位不变,其它位取反,最后再加1,得到原码为:1000 0100 转为十进制就是:-4

    即:-14>>2 = -4

    PS:对于右移,直观的理解为,对于正数来说,右移1位相当于除以2(但效率比除法高);对于负数来说,没有直观的理解。


    1. a=3
    2. b=7
    3. print(a&b) -->按位与
    4. print(a|b) -->按位或
    5. print(a~b) -->按位异或(相同为1,不同为0
    6. print(a>>b) -->左移
    7. print(a<<b) -->右移
    8. print(~a) -->取反()

    自动化平台 官方网站 交流学习 学习课程 公开课程
    懒人精灵 懒人精灵官网 正在跳转 562451816 💻进阶课程列表 官方课合集
    AiWork AIWork官网 正在跳转 818641934 📗中级课程 官方课合集
    EasyClick EasyClick官网 正在跳转 815053746
    小派精灵 小派精灵官网 正在跳转 429533660
    按键精灵 按键精灵官网 正在跳转 815057794
    易语言 易语言官网
    何鑫云机 合鑫云手机-云真机
    鸟人云机 鸟人云手注册 鸟人云机下载 安卓7.1~10系统