1) 二进制。 在 golang 中,不能直接使用二进制来表示一个整数,它沿用了 c 的特点。
fmt.Printf("%b ",num1)//101
2) 十进制:0-9 ,满 10 进 1。
3) 八进制:0-7 ,满 8 进 1, 以数字 0 开头表示一个8进制数。
//以0开始表示8进制
var num2 int = 070
fmt.Println("num2=",num2)//num2= 56
4) 十六进制:0-9 及 A-F,满 16 进 1, 以 0x 或 0X 开头表示。此处的 A-F 不区分大小写。
//以0x开始表示16进制,x不区分大小写
var num3 = 0x8f0
fmt.Println("num3=",num3)//num3= 2288
计算机只能运算加法,在进行减法运算的时候把减法当做加法处理。都是以补码的形式计算。一个数的补码计算方式如下:
3个位运算(按位与&、按位或|、按位异或^),它们的运算规则是:
按位与& :两位全为1,结果为 1,否则为 0
按位或|:两位有一个为 1,结果为 1,否则为 0
按位异或 ^:两位一个为 0,一个为 1,结果为 1,否则为 0
如下例子:先计算2的补码、3的补码。在进行位运算。运算结果是补码,再转回源码。
func main() {
/**
2的补码 0000 0010
3的补码 0000 0011
2&3补码 0000 0010 = 2 因为正数补码和源码一样。结果就是2
2|3补码 0000 0011 = 3 因为正数补码和源码一样。结果就是3
2^3补码 0000 0001 = 1 因为正数补码和源码一样。结果就是1
*/
fmt.Println(2&3)
fmt.Println(2|3)
fmt.Println(2^3)
}
当有负数参与运算时就很麻烦。比如:-2^2 需要把计算-2的补码、2的补码---》然后进行异或运算---》计算的结果是补码,再转回源码。得到最终结果。如下所示:
Golang 中有 2 个移位运算符:>>右移和左移<< ,运算规则:
右移运算符 >>:低位溢出,符号位不变,并用符号位补溢出的高位。
左移运算符 <<:符号位不变,低位补 0。
func main() {
a := 1 >> 2 // 0000 0001 =>0000 0000 = 0
c := 1 << 2 // 0000 0001 ==> 0000 0100 => 4
fmt.Println("a=", a)
fmt.Println("c=", c)
}