如何使用按位运算符将二进制更改为十进制?

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 shiftb 的值仍然是0b00。因此,OR 操作将再次给出相同的值。

【讨论】:

哦!没看到。

以上是关于如何使用按位运算符将二进制更改为十进制?的主要内容,如果未能解决你的问题,请参考以下文章

非负整数的基数排序(按位)

如何将表列从十进制更改为 varchar [重复]

操作符详解

如何将Basys mx3计时器从十六进制更改为十进制

如何将 money 和 smallmoney 的所有 SQL 列更改为十进制?

如何将二进制文件更改为 RDD 或 Dataframe?