gpt4 book ai didi

java - Java 中的无符号整型

转载 作者:搜寻专家 更新时间:2023-10-30 19:58:05 25 4
gpt4 key购买 nike

我正在尝试实现一个现有的网络协议(protocol),该协议(protocol)大量使用 Java 不支持的无符号数据类型。我目前所做的是针对每种数据类型,选择下一个更大的数据类型,以便无符号数可以适合正数区域,然后使用字节移位来获得所需的效果。由于这很容易出错,而且对于 unsigned long 以后,我必须使用比扩展类型重得多的 BigInteger,我想知道是否有更好的方法来实现这一点?

最佳答案

根据您的操作,您可以将 long 视为 64 位值,将 int 视为 32 位值。大多数操作 esp readInt/Long writeInt/Long 通过忽略符号来工作。

您能否举例说明您对这些数字执行的操作,也许我们可以建议如何在不扩展类型的情况下执行相同的操作。

例如,++、--、+、-、*、==、!=、<< 无论符号如何,都一样(即给出相同的答案)。对于 >> 你可以替换为 >>>

是/、%、>、>=、<、<= 和打印函数假定有符号值,但您应该能够解决这些问题(如果您使用它们)。

例如

long unsignedA = 
long unsignedB =
boolean greater = unsignedA + Long.MIN_VALUE > unsignedB + Long.MIN_VALUE

编辑:为什么这行得通?部分原因是 java 没有上溢/下溢异常。

例如

byte unsignedA = 0;
unsignedA--;
// unsignedA == FF, is this -1 or 255? Java assumes the former but you assume the later

byte unsignedB = unsignedA * unsignedA;
// unsignedB is -1 * -1 = 1 or (byte) (255*255) = (byte) 65525 = 1.

关于java - Java 中的无符号整型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4449100/

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