我该如何理解内置函数bin(x)?

-2 投票
2 回答
691 浏览
提问于 2025-04-17 04:51

bin(x)

这个函数可以把一个整数转换成二进制字符串。得到的结果是一个有效的Python表达式。如果x不是Python的整数对象,它需要定义一个__index__()方法,这个方法会返回一个整数。

那么如果我想从Cadilac中获取bin,我应该怎么处理这个字符串和__index__()方法呢?怎么正确地把它们组合在一起?

2 个回答

1
car = "Cadillac"
binstr = "".join( [ bin((1<<8)+ord(s))[3:] for s in car ] )
bin(1<<8+0)[3:]
len(bin(1<<8+0)[3:])
"".join( [ bin((1<<8)+ord(s))[3:] for s in "Cadillac" ] )

这个代码片段定义了一个字符串,内容是二进制数字:'10000111100001110010011010011101100110110011000011100011'。

接下来,我们要对这个字符串里的每一个字符进行循环处理。ord()这个函数可以把字符转换成它的数字表示(也就是ASCII码)。而bin()函数则是把数字转换成二进制字符串。这里的[2:]是用来跳过二进制字符串开头的'0b'部分。最后,"".join()这个方法会把所有的二进制字符串连接成一个完整的字符串。

补充一下,bin()函数会去掉前面的零,正如有评论者提到的那样。根据原问题的背景(字符字符串),我假设我们总是使用8位的字符。我做的修改是在第8位前加了一个高位,这个高位会被[3:]去掉。我这样做有点小聪明。不过,这种方法在处理Unicode字符串时会出错。

这里有个例子:'00000000'。

数字8。

还有一个例子:'0100001101100001011001000110100101101100011011000110000101100011'。

4

这段代码应该能帮助你入门:

>>> for c in "Cadillac":
...     n = ord(c)                  # convert the character to a number
...     print '{0:08b}'.format(n)   # show the number with 8 binary digits
... 
01000011
01100001
01100100
01101001
01101100
01101100
01100001
01100011

撰写回答