如何使用按位运算符将二进制更改为十进制?
Posted
技术标签:
【中文标题】如何使用按位运算符将二进制更改为十进制?【英文标题】:how to change binary to Decimal using bitwise operator? 【发布时间】:2021-08-29 21:20:26 【问题描述】:在我询问了有关此代码的问题(以查找图像的分辨率)后,
with open("image.jpg",'rb') as file:
file.seek(163)
a = file.read(2)
height = (a[0] << 8) | a[1]
a = file.read(2)
width = (a[0] << 8) | a[1]
print(str(height) + " x " + str(width))
我得到了很多答案,这让我提出了更多问题。其中之一是我可以使用按位运算符将二进制更改为十进制吗? 让我告诉你我得到了什么,并告诉我是否有更好的方法。
a = 0b11 #which is 3 in decimal
b = a >> 2 #2 is the length of a
print(a | b)
print(b | a)
a = 0b1000000000 #which is 512 in decimal
b = a >> 10 #10 is the length of a
print(a | b)
print(b | a)
它有效。即使
a = 0b11
b = a >> 10000000000
print(a | b)
答案还是一样。
【问题讨论】:
代码没有将二进制转换为十进制。该代码占用两个字节并生成一个 Int16。字节是高字节,然后是低字节。所以代码将第一个字节移动 8 位,然后对 LSB 进行 OR'ing。以下格式为二进制:a = 0b11,与 a = 3 相同。 我应该对按位进行更多研究还是只使用 PIL 库? 代码没有问题。它是有效的。我不喜欢使用库进行简单的操作。 【参考方案1】:问题 -> 您只是打印相同的数字:
b = a >> 2
在这里,当您通过2
执行right shift
时。它实际上是将0b11
转换为0b00
。然后bitwise OR
操作将产生相同的数字,即0b11
。
如果为真,则相同:
b = a >> 10000000000
在这里,您正在通过10000000000
执行right shift
,b
的值仍然是0b00
。因此,OR 操作将再次给出相同的值。
【讨论】:
哦!没看到。以上是关于如何使用按位运算符将二进制更改为十进制?的主要内容,如果未能解决你的问题,请参考以下文章