因此,计算机使用二进制补码在内部表示有符号整数。即,-5表示为^ 5 +1 =“ 1111 1011”。
但是,尝试打印二进制表示形式,例如以下代码:
var i int8 = -5
fmt.Printf("%b", i)
输出-101
。不太符合我的期望。格式是不同的还是还是不使用二进制补码?
有趣的是,转换为无符号int会导致“正确”位模式:
var u uint8 = uint(i)
fmt.Printf("%b", u)
输出是11111011
-的2s补码-5
。
因此,在我看来,值内部实际上是在使用二进制补码,但格式是打印无符号5
并加a -
。
有人可以澄清吗?
我相信答案在于fmt
模块如何格式化二进制数,而不是内部格式。
如果您看一看fmt.integer
,该函数首先执行的操作之一就是将负有符号整数转换为正整数:
165 negative := signedness == signed && a < 0
166 if negative {
167 a = -a
168 }
然后,可以-
在此处输出的字符串前面附加逻辑。
IOW -101
确实-
附加到5
二进制文件中。
注意:fmt.integer
是pp.fmtInt64
在print.go中调用的,本身是pp.printArg
在同一函数中调用的。
问题内容: 我知道用和 将小数转换为二进制(在这里我取32位结果的低16位)。 我想做的是另一种方法,并采用16位二进制补码二进制字符串并将其转换为十进制。 即 而不是 我该怎么做? 问题答案: 您需要将结果读取到中。 此打印。
问题内容: Python中的整数以二进制补码存储,对吗? 虽然: 和: 真是la脚。如何获取python以实数二进制位给我数字,并且没有0b开头?所以: 问题答案: 不确定如何使用标准库获取所需的内容。那里有一些脚本和软件包可以为您完成转换。 我只是想指出“为什么”以及为什么它不la脚。 bin()不返回二进制位。它将数字转换为二进制字符串。根据python语言定义,前导‘0b’告诉解释器您正在处
问题内容: 我想使用二进制补码表示一位负整数。使用标准的Python位表示实用程序并没有多大帮助: 的补码形式为。我该怎么做呢? 问题答案: Python的整数已经使用二进制补码,但是由于它们具有任意精度,因此负数的二进制表示形式在开始时将具有一个无限的1s字符串,就像正数具有一个无限的0s字符串一样。由于显然无法显示,因此用负号代替。 如果您想要特定宽度的二进制表示形式,则可以使用模数。
1)11111111>0111111 我认为这是错误的,因为第一个数字代表符号,所以我们比较负值和正值。 2)(11111111+11111111)>(00000001-00000010) 谢谢你。
将二进制补码转换为十进制最简单的方法是什么?例如,如果我通常将“1001”之类的字符串转换为十进制,则得到9。但我实际上想得到一个简单的-7。你们有什么建议?,
问题内容: 我有一个二进制字符串,如下所示: 我希望我的INT的值是代替 实现此目标的最佳方法是什么? 问题答案: 使用Where 是您的方案无法表示的最小正数。(在这种情况下为8,因为为7且为负。) 大于,所以你减去的,给。