gpt4 book ai didi

有符号数的 Golang 左移/右移行为

转载 作者:数据小太阳 更新时间:2023-10-29 03:38:27 28 4
gpt4 key购买 nike

有人可以解释一下 Golang 中的左移/右移行为吗?请在此处引用示例代码:https://play.golang.org/p/7vjwCbOEkw

package main

import (
"fmt"
)

func main() {
var lf int8 = -3
fmt.Printf("-3 : %08b\n", lf)
fmt.Printf("<<1: %08b\n", lf<<1)
fmt.Printf("<<2: %08b\n", lf<<2)
fmt.Printf("<<3: %08b\n", lf<<3)
fmt.Printf("<<4: %08b\n", lf<<4)
fmt.Printf("<<5: %08b, %d\n", lf<<5, lf<<5)
fmt.Printf("<<6: %08b, %d\n", lf<<6, lf<<6)
fmt.Printf("<<7: %08b, %d\n", lf<<7, lf<<7)
fmt.Printf("<<8: %08b, %d\n", lf<<8, lf<<8)
fmt.Printf("<<9: %08b, %d\n", lf<<9, lf<<9)
}

-3 : -0000011
<<1: -0000110
<<2: -0001100
<<3: -0011000
<<4: -0110000
<<5: -1100000, -96
<<6: 01000000, 64
<<7: -10000000, -128
<<8: 00000000, 0
<<9: 00000000, 0

最佳答案

-3 是,在 two's complement , 11111101 和当程序打印 -0000011 时你看到的是一个 - 和数字绝对值的二进制表示。在二进制补码中,最高位是 0 表示正数(包括零),1 表示负数。如果将此数字 (11111101) 左移,则低 7 位向左移动一位,而 0 从右侧进入,替换最低位。如您在示例中所做的那样移动将导致:

11111101  -3
11111010 -6
11110100 -12
11101000 -24
11010000 -48
10100000 -96
01000000 64
10000000 -128
00000000 0
00000000 0
...

您只需将所有位模式视为二进制补码,一旦您知道它是如何工作的,一切都会变得有意义。

关于有符号数的 Golang 左移/右移行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46885070/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com