Go - 执行无符号移位操作

时间:2015-10-25 23:33:09

标签: go binary-operators

无论如何在Go中执行无符号移位(即无符号右移)操作? Java中的这类东西

0xFF >>> 3

我在这件事上唯一能找到的是post,但我不确定我该做什么。

提前致谢。

1 个答案:

答案 0 :(得分:3)

  

The Go Programming Language Specification

     

Numeric types

     

数字类型表示整数或浮点值的集合。   预先声明的与体系结构无关的数字类型包括:

uint8       the set of all unsigned  8-bit integers (0 to 255)
uint16      the set of all unsigned 16-bit integers (0 to 65535)
uint32      the set of all unsigned 32-bit integers (0 to 4294967295)
uint64      the set of all unsigned 64-bit integers (0 to 18446744073709551615)

int8        the set of all signed  8-bit integers (-128 to 127)
int16       the set of all signed 16-bit integers (-32768 to 32767)
int32       the set of all signed 32-bit integers (-2147483648 to 2147483647)
int64       the set of all signed 64-bit integers (-9223372036854775808 to 9223372036854775807)

byte        alias for uint8
rune        alias for int32
     

n位整数的值是n位宽并使用表示   二进制补码算法。

     

还有一组预先声明的数字类型   特定于实现的大小:

uint     either 32 or 64 bits
int      same size as uint
uintptr  an unsigned integer large enough to store the uninterpreted bits of a pointer value
     

当不同的数字类型混合在一起时,需要转换   表达或转让。

     

Arithmetic operators

<<   left shift             integer << unsigned integer
>>   right shift            integer >> unsigned integer
     

移位运算符将左操作数移位移位计数   由右操作数指定。如果,他们实施算术转移   左操作数是有符号整数,如果是,则逻辑移位   无符号整数。班次计数没有上限。转移   表现为好像左操作数被移位n次1   数量n。结果,x <&lt;&lt; 1与x * 2和x>&gt;相同。 1是   与x / 2相同但截断为负无穷大。

在Go中,它是无符号整数移位。 Go有签名和无符号整数。

取决于值0xFF的类型。假设它是无符号整数类型之一,例如uint

package main

import "fmt"

func main() {
    n := uint(0xFF)
    fmt.Printf("%X\n", n)
    n = n >> 3
    fmt.Printf("%X\n", n)
}

输出:

FF
1F

假设它是有符号整数类型之一,例如int

package main

import "fmt"

func main() {
    n := int(0xFF)
    fmt.Printf("%X\n", n)
    n = int(uint(n) >> 3)
    fmt.Printf("%X\n", n)
}

输出:

FF
1F