我遇到了一些我无法理解的问题。你能解释一下为什么在将int 127转换为二进制时我得到1111111
因为结果应该是'01111111'吗?
现在我正在尝试这个例子中的女巫to_s(2)
:
127.to_s(2)
Result: '1111111'
提前致谢!
答案 0 :(得分:5)
1111111 2 = 01111111 2 = 001111111 2 = 127 10 = 0127 10 = 00127 10
它不应该是01111111
,而不应该是0127
。您可以根据需要添加任意数量的前导零,但这绝对没有义务或内在原因。
1111111 2 = 1 * 2 7 + 1 * 2 6 + ... = 127
01111111 2 = 0 * 2 8 + 1 * 2 7 + 1 * 2 6 + ... = 127
如果您从127询问如何生成01111111
,快速搜索会发现以下两种解决方案:
"%08b" % 127
sprintf("%08b", 127)
(我不认识红宝石。)
答案 1 :(得分:5)
您可以使用sprintf
:
sprintf("%08b", 127) #=> "01111111"
# ^^^
# |||
# ||+- "b" = format argument as binary number
# |+-- "8" = number of digits
# +--- "0" = pad with 0
答案 2 :(得分:0)
这是正确的二进制转换
127
符合2^7=128
1 1 1 1 1 1 1
1+2+4+8+16+32+64= 127