Python中的二进制补码?

2022-01-09 00:00:00 python binary bit-manipulation

问题描述

Python 中的整数存储在二进制补码中,对吗?

Integers in Python are stored in two's complement, correct?

虽然:

>>> x = 5
>>> bin(x)
0b101

还有:

>>> x = -5
>>> bin(x)
-0b101

这很蹩脚.如何让 python 给我 REAL 二进制位的数字,并且前面没有 0b?所以:

That's pretty lame. How do I get python to give me the numbers in REAL binary bits, and without the 0b infront of it? So:

>>> x = 5
>>> bin(x)
0101
>>> y = -5
>>> bin(y)
1011


解决方案

不确定如何使用标准库获得所需的内容.有一些脚本和包可以为您进行转换.

Not sure how to get what you want using the standard lib. There are a handful of scripts and packages out there that will do the conversion for you.

我只是想说明为什么",以及为什么它不蹩脚.

I just wanted to note the "why" , and why it's not lame.

bin() 不返回二进制位.它将数字转换为二进制字符串.根据 python 语言定义,前导 '0b' 告诉解释器您正在处理二进制数.这样你就可以直接使用二进制数,就像这样

bin() doesn't return binary bits. it converts the number to a binary string. the leading '0b' tells the interpreter that you're dealing with a binary number , as per the python language definition. this way you can directly work with binary numbers, like this

>>> 0b01
1
>>> 0b10
2
>>> 0b11
3
>>> 0b01 + 0b10
3

这不是蹩脚的.太好了.

that's not lame. that's great.

http://docs.python.org/library/functions.html#bin

bin(x)

将整数转换为二进制字符串.

Convert an integer number to a binary string.

http://docs.python.org/reference/lexical_analysis.html#integers

整数和长整数文字由以下词法定义描述:

Integer and long integer literals are described by the following lexical definitions:

bininteger ::= "0" ("b" | "B") bindigit+

bininteger ::= "0" ("b" | "B") bindigit+

bindigit ::= "0" |1"

bindigit ::= "0" | "1"

相关文章