相关疑难解决方法(0)

将有符号整数转换为无符号长整型的最佳方法?

对于Java中的某些散列函数,将值视为无符号整数(例如,与其他实现进行比较)会很好,但Java仅支持有符号类型.我们可以将签名转换为int"未签名" long,如下所示:

public static final int BITS_PER_BYTE = 8;
public static long getUnsignedInt(int x) {
  ByteBuffer buf = ByteBuffer.allocate(Long.SIZE / BITS_PER_BYTE);
  buf.putInt(Integer.SIZE / BITS_PER_BYTE, x);
  return buf.getLong(0);
}
getUnsignedInt(-1); // => 4294967295
Run Code Online (Sandbox Code Playgroud)

但是,这个解决方案对我们真正做的事情来说似乎有些过分.有没有更有效的方法来实现同样的事情?

java unsigned

50
推荐指数
4
解决办法
6万
查看次数

获得Java签约的最快方式?

我想将float值的符号作为int-1或1 的值.

避免条件总是降低计算成本的好主意.例如,我能想到的一种方法是使用快速bit-shift获取标志:

float a = ...;
int sign = a >> 31; //0 for pos, 1 for neg
sign = ~sign; //1 for pos, 0 for neg
sign = sign << 1; //2 for pos, 0 for neg
sign -= 1; //-1 for pos, 1 for neg -- perfect.
Run Code Online (Sandbox Code Playgroud)

或者更简洁:

int sign = (~(a >> 31) << 1) - 1;
Run Code Online (Sandbox Code Playgroud)
  1. 这看起来像是一个好方法吗?
  2. 鉴于字节顺序问题(MSB持有标志),这是否适用于所有平台?

java optimization logic bit-manipulation

29
推荐指数
3
解决办法
4万
查看次数

标签 统计

java ×2

bit-manipulation ×1

logic ×1

optimization ×1

unsigned ×1