4.Python3位运算符
a = 10;b = 11
print(“十进制数为:”, dec)
print(“转换为二进制为:”, bin(dec))
print(“转换为八进制为:”, oct(dec))
print(“转换为十六进制为:”, hex(dec))
二进制为: #(输 出)a: 0b1010
二进制为: #(输 出)b: 0b1011
其实就是对比二进制数的,有点相当于加减法的式子,进行对比判断得出数字。
运算 符 | 功能 | 实例 |
---|---|---|
& | 按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0 | print( a & b ) # ( 输出)10 ;(二进制为: 0b1010) |
I | 按位或运算符:只要对应的二个二进位有一个为1时,结果位就为1 | print( a I b ) #(输出)11;(二进制为: 0b1011) |
^ | 按位异或运算符:当两对应的二进位相异时,结果为1 | print ( a ^ b ) #(输 出)1;(二进制:0b1) |
~ | 按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1 | print ( ~a ) #(输出)-11;(二进制:-0b1011) |
<< | 左移动运算符:运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0。 | print( a << 2 ) #(输出)40;(二进制:0b101000) |
>> | 右移动运算符:把">>“左边的运算数的各二进位全部右移若干位,”>>"右边的数指定移动的位数 | print( a >> 2 ) #(输出)2;(二进制:0b10) |
详解:
数字转化为二进制都是十六位字节:
1000000000000001
开头的1代表符号位为正,
开头的0代表符号位为负
符号位不移动
a&b(两个相应位都为1,则该位的结果为1,否则为0):
1000……1 0 1 0
1000……1 0 1 1
上下对比判断:
1000……1 0 1 0 二级制数
print(a&b)则转化为十进制输出得 10
a | b(二个二进位有一个为1时,结果位就为1):
1000……1 0 1 0
1000……1 0 1 1
上下对比判断:
1000……1 0 1 1 二级制数
print(a | b)则转化为十进制输出得 11
a ^ b(当两对应的二进位相异时,结果为1,否则为0):
1000……1 0 1 0
1000……1 0 1 1
上下对比判断:
0000……0 0 0 1 二级制数
print(a&b)则转化为十进制输出得 1
~a(二进制位取反,即把1变为0,把0变为1):
1000……1 0 1 0
上下对比判断:
0111……0 1 0 1 二级制数 总的十六个字节
print(a&b)则转化为十进制输出得 -11
a<<2(各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0):
1000 …… 1 0 1 0
上下对比判断:
1000…… 1 0 1 0 0 0 二级制数
print(a<<2)则转化为十进制输出得 40
a>>2(各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0):
1000 …… 1 0 1 0
上下对比判断:
1000…… 0 0 1 0 二级制数
print(a>>2)则转化为十进制输出得 2
~ 按位取反运算符
换位取反运算符:
A = 5 ~A = -6
A = -5 ~A = 4
所有正整数的按位取反是其本身+1的负数
所有负整数的按位取反是其本身+1的绝对值
零的按位取反是 -1
转换:
负数部分:
原码和反码的相互转换:符号位不变,数值位按位取反
原码和补码的相互转换:符号位不变,数值位按位取反,末位再加1
已知补码,求原码的负数的补码:符号位和数值位都取反,末位再加1
正整数的原码、反码和补码都一样;
#原码即数值的二进制代码三十二位 首位位符号位