python中的位操作使用了多少位?

2024-09-29 20:30:48 发布

您现在位置:Python中文网/ 问答频道 /正文

Java中的int数据类型有32位,因此,当我们在Java中进行位操作时,它将以32位发生。但是在Python中整数数据类型没有限制,那么在Python中进行多少位操作呢

例如2&;java中的3将在32位中发生,即

0000 0000 0000 0000 0000 0000 0000 0010 &; 0000 0000 0000 0000 0000 0000 0000 0011

但是python中的多少位也会发生同样的情况

也就是说,会吗 10&11

0010&0011

或者什么


Tags: 情况整数javaintamp数据类型位操作amp0011
3条回答

这是一个非常有趣的问题。
我不确定答案,但我认为这可能取决于较大数字的位。
例如:

a = 2
b = 3
print(bin(a))
print(bin(b))
print(a&b)
b=11
print(bin(a))
print(bin(b))
print(a&b)

那么输出是:

0b10
0b11
2
0b10
0b1011
2

在b为3的情况下,需要2位

2 = 10
3 = 11

在b为11的情况下,它将占用4位

2 = 0010
11 = 1011

这就是我观察到的,请告诉我我到底错了没有

如果我错了,请纠正我

在Python3.1之前,没有简单的方法确定Python如何在内部表示特定的整数,即使用了多少位。Python3.1在int类型中添加了一个bit_length()方法,该方法正好实现了这一点

资源 https://wiki.python.org/moin/BitManipulation

x=7
y=30
print( (x|y).bit_length() )

产出:5

与其他整数运算一样,位操作具有无限精度

>>> (0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef ^ 
...  0x64004ee264004ee264004ee264004ee264004ee264004ee264004ee264004ee2 == 
...  0xbaadf00dbaadf00dbaadf00dbaadf00dbaadf00dbaadf00dbaadf00dbaadf00d)
True

如果您试图匹配其他语言中例程的输出,可以通过使用适当的位掩码将结果钳制到一定数量的位result & 0xff表示1个字节,result & 0xffff表示2个字节,result & 0xffffffff表示4个字节,等等

...will it be 10 & 11 or 0010 & 0011?

没有区别0b10 == 0b00100b11 == 0b0011。它们是完全相同的数字;左边的零填充不会改变任何东西。你可以把这些数字想象成左边有无穷多个零

我向你保证,我不是故意迟钝。你会问,“是A还是B?”答案是,“A和B都是一样的东西。”

在java或C++或C语言或任何其他具有固定宽度整数类型的语言中,它们执行16位或32位或64位操作的事实对代码的行为有明显的影响。输出结果被截断为输入类型的位宽度。您必须始终考虑溢出以及数字可能会如何缠绕。添加两个数字可能会导致较小的数字。固定宽度位操作有一个您必须考虑的可见效果

Python使用无限精度的整数,所以没有这样的东西。是的,如果你偷看一下无限制精度整数库是如何工作的,它会在其中的某个地方使用固定大小的整数。它最终将执行执行32位AND或64位XOR或任何情况的汇编指令。但所有这些都是Python内部的。它对我们用户来说是不可见的。外部可见的行为是整数似乎具有无限精度。我们可以将每个数字视为在概念上左侧有无限多个0位(如果数字为负数,则为无限多个1位)

相关问题 更多 >

    热门问题