gpt4 book ai didi

java - 包装器的 parseXXX() 用于签名二进制误解

转载 作者:搜寻专家 更新时间:2023-11-01 02:28:41 25 4
gpt4 key购买 nike

让我们以 Byte.parseByte() 为例作为包装器之一的 parseXXX()

来自 parseByte(String s, int radix)'s JavaDoc :

Parses the string argument as a signed byte in the radix specified by the second argument.

但是如果 radix = 2 就不是这样了。也就是说,-127的二进制字面量是10000000:

byte b = (byte) 0b10000000;

所以下面的应该是真的:

byte b = Byte.parseByte("10000000", 2);

但不幸的是,它抛出 NumberFormatException,而我必须按如下方式进行:

byte b = Byte.parseByte("-111111", 2);

其中parseByte()将二进制字符串解析为sign-magnitude(符号和大小),这里它应该解析为带符号的二进制(2的补码,即MSB是符号位).

我错了吗?

最佳答案

Am I wrong about this?

是的。 Javadoc 只字不提 2 的补码。事实上,它明确说明了它如何识别负值(即 - 前缀,如此有效地“人类可读”的符号大小)。

换个角度想。如果 parseByte 将 radix-2 解释为 2 的补码,您希望它对 radix-10(或任何其他基数)做什么?为了一致性,它必须是 10 的补码,这会很不方便,我可以向你保证!

关于java - 包装器的 parseXXX() 用于签名二进制误解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14937948/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com