Go 在这个例子中,位移位是如何工作的?
我正在golang.org上阅读Go 在这个例子中,位移位是如何工作的?,go,bit,bit-shift,Go,Bit,Bit Shift,我正在golang.org上阅读go教程,我遇到了一个我部分理解的例子 MaxInt uint64 = 1<<64 - 1 MaxInt uint64=1这里发生了什么,一步一步: 以1为例 将其向左移动64位。这很棘手。结果实际上需要65位来表示,即1后跟64个零。既然我们在这里计算一个64位的值,为什么它还要编译而不是溢出到0或1或产生编译错误 它之所以有效,是因为用于计算Go中常量的算法有点神奇(),因为它与所计算的命名常量的类型无关。你可以说foouint8=11a
go
教程,我遇到了一个我部分理解的例子
MaxInt uint64 = 1<<64 - 1
MaxInt uint64=1这里发生了什么,一步一步:
以1为例
将其向左移动64位。这很棘手。结果实际上需要65位来表示,即1后跟64个零。既然我们在这里计算一个64位的值,为什么它还要编译而不是溢出到0或1或产生编译错误
它之所以有效,是因为用于计算Go中常量的算法有点神奇(),因为它与所计算的命名常量的类型无关。你可以说foouint8=11ahh好的,所以减去1,第65位消失,留下111111….
?是的,你得到了!(但保留FFFF…(16个十六进制数字)
,或1111…(64个二进制1
)减法在任何基数中都是一样的,就像在基数101000-1=999
中一样,少一位。@DavidC.Rankin不是专门用来表示有符号整数的两位补码吗?也就是说,没有无符号的两位补码编号系统(至少在编程中的二进制数上下文中没有)c.f。