65535号有什么特别之处吗?


11

2¹⁶-1&2⁵=2⁵(或?显然吗?)

一个开发人员今天问我什么是65535和32,即2¹⁶-1和2⁵=?我起初以为是32,但似乎很容易,然后我想了几分钟,然后回答了32。32似乎是正确的答案,但是如何?65535 =2¹⁶-1= 1111111111111111(但似乎不正确,因为此二进制数全为-1(?)),32 = 100000,但我无法将其转换为头脑,因此无论如何我回答32,因为我有回答一些问题。答案32实际上是微不足道的吗?以同样的方式2¹⁶-1&2⁵-1= 31吗?开发人员为什么要问我有关65535的确切信息?

要求我评估的二进制值是1111111111111111和100000,但我不明白为什么1111111111111111不是-1。不是-1吗?65535是一个产生溢出的数字,我怎么知道?


3
一定有一些特别的东西。它使我想起了捷克啤酒国家标准56 6635。嗯...是时候喝啤酒了。
joshp 2012年

5
您做出了太多的假设:65535仅在16位二进制补码算术中给出-1。它在16位二进制补码算术中给出-0,在32位二进制补码和补码算术中给出65535。
mouviciel 2013年

3
这是TCP端口的上限。
Renae Lider 2014年

Answers:


23

在这种情况下,该数字被视为无符号整数,这意味着所有设置的位都不会产生-1(如果已签名,则是,您将是正确的)。因此所有16位设置都将给您65535。

有趣的是,在进行逻辑位操作时,有符号状态并不是一个因素。位本身没有被签名,因为它们是计算机中最低的组件。如果ex中的位由cpu操作指定。寄存器将被视为已签名或未签名。

负数是通过将最高有效位(MSB)设置为true产生的,如果该数字被视为带符号的(哪个“边”或将设置哪个外位取决于cpu体系结构,即big-endian / little-endian) )。


9
大多数现代机器通过翻转位并加一:2的补码,转换为负数。仅设置一位就给您带来+0和-0的问题。
詹姆斯

1
那不一定是问题。无论结果符号如何,1的补码都将截断为零。2的补码截断为-infinity。在某些应用程序中,这可能会给您带来麻烦。
John R. Strohm 2013年

18

微不足道的。二进制文件中的65535都是全1,因此将其与小于65535的X进行与运算将得到X。


10

回答问题的第二部分。您已将其标记为因此,以32位表示的65535为00000000000000001111111111111111,带符号或无符号,不是 -1。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.