gpt4 book ai didi

java - 将 int 的位变成 long

转载 作者:行者123 更新时间:2023-11-29 06:04:27 26 4
gpt4 key购买 nike

我正在为我的一个 Java 应用程序构建一个轻量级的高精度算术库,并且一直在做大量的位运算(双关语)。偶尔我得到一个 int 必须通过简单的单词扩展将其转换为 longlong 的 32 个最低有效位应该变成等于 int 的位。

不幸的是,转换仅适用于正数。此外,在与 long 相同的算术表达式中使用 int 会预先隐式转换为 long,这意味着例如如果 i 为负,这将不起作用:

long l = (i & 0xffffffffL);

目前我正在使用以下内容:

long l = (((long)(i >>> 8)) << 8) | (i & 0xff);

有没有更优雅的方法来做到这一点?

编辑:

我可能遗漏了一些东西:

int i = -1;

long l = (i | 0xffffffffL);

System.out.println(l);

这会打印出 -1 而不是 4294967295我错过了什么?

编辑 2:

糟糕... | 而不是 &。小******他妈的怎么跑到那儿的?

编辑 3:

不知道我到底错过了什么,但这很有效:

long l = (i & 0xffffffffL);

...这让这个问题完全无关紧要,我猜。

最佳答案

您真的测试过 long l = (i & 0xffffffffL); 代码吗?是的,i 的值将首先转换为 long,这意味着如果 i 为正则为 0 扩展,如果 i 则为 1 扩展是负的。在任何一种情况下,低 32 位都不会受到影响,因此除非我误解了问题,否则 & 操作应该会给您带来您想要的结果。

关于java - 将 int 的位变成 long,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9001723/

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