可能重复:
如何在python中获得逻辑上正确的二进制移位
如何在python中执行无符号右移?
IE等价的java是这样的:
x >>> y or x >>>= y
Run Code Online (Sandbox Code Playgroud) 某些语言(例如 Java、Verilog)同时具有按位逻辑运算符(<<、>>)和算术移位运算符(<<<、>>>)。
对于无符号值,逻辑移位和算术移位具有相同的操作。假设 8'b11000101 是 8 位无符号数 197 的二进制表示,那么
8'b11000101 >> 2 => 8'b00110001
8'b11000101 >>> 2 => 8'b00110001
8'b11000101 << 2 => 8'b00010100
8'b11000101 <<< 2 => 8'b00010100
Run Code Online (Sandbox Code Playgroud)
对于有符号值,只有算术和逻辑左移操作是相同的,但算术右移会导致符号扩展。假设 8'b11000101 是 8 位有符号数 -59 的二进制表示,那么
8'b11000101 >> 2 => 8'b00110001
8'b11000101 >>> 2 => 8'b11110001
8'b11000101 << 2 => 8'b00010100
8'b11000101 <<< 2 => 8'b00010100
Run Code Online (Sandbox Code Playgroud)
Python只有逻辑移位运算符,没有算术移位运算符。那么如何在Python中实现有符号和无符号值的算术右移呢?