gpt4 book ai didi

java - 整数和长整型转换

转载 作者:行者123 更新时间:2023-11-30 07:42:40 25 4
gpt4 key购买 nike

假设我想创建一个 long 值,其中包含两个打包的 int 。我想将两个 int 并排打包在 long 中。我可以想到两种不同的方法来实现这一目标,我相信这两种方法都会以相同的方式工作:

int a = 0x7FFFFFFF;
int b = 0x10000000;
long x;

// Method one
x = (a & 0xFFFFFFFFL) << 32 | (b & 0xFFFFFFFFL);

// Method two
x = (long) (a << 32) | (long) a;

这两种方法有什么区别?它们在所有情况下都会产生相同的结果吗?

最佳答案

第二种方法不行。除了拼写错误(应该以长 b 结尾)之外,您的 a 不会受到移位的影响(感谢 harold 的更正)。您必须在转移之前进行转换。

int a = 0x7FFFFFFF;
int b = 0x10000000;
long x;

// Method one
x = (a & 0xFFFFFFFFL) << 32 | b;

// Method two
x = (((long)a) << 32) | b;

此外,在第二个和第一个方法中,b 的转换是多余的。转换是隐式完成的。

这两种方法看起来非常相似。但是,方法 1 可能会执行一些不必要的操作,因为它将执行额外的 AND 和转换。

方法一:

  • al <- I2L
  • res <- al LAND 0xFFFFFFFFL
  • res2 <- res LSHL 32
  • bl <- b I2L
  • al 或 bl

方法2:

  • al <- I2L
  • res2 <- LSHL 32
  • bl <- b I2L
  • al 或 bl

关于java - 整数和长整型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34440326/

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