Java storing two ints in a long

前端 未结 2 1705
旧时难觅i
旧时难觅i 2020-12-03 06:43

I want to store two ints in a long (instead of having to create a new Point object every time).

Currently, I tried this. It\'s not working, but I don\'t

相关标签:
2条回答
  • 2020-12-03 07:09

    Here is another option which uses a bytebuffer instead of bitwise operators. Speed-wise, it is slower, about 1/5 the speed, but it is much easier to see what is happening:

    long l = ByteBuffer.allocate(8).putInt(x).putInt(y).getLong(0);
    //
    ByteBuffer buffer = ByteBuffer.allocate(8).putLong(l);
    x = buffer.getInt(0);
    y = buffer.getInt(4);
    
    0 讨论(0)
  • 2020-12-03 07:10

    y is getting sign-extended in the first snippet, which would overwrite x with -1 whenever y < 0.

    In the second snippet, the cast to int is done before the shift, so x actually gets the value of y.

    long l = (((long)x) << 32) | (y & 0xffffffffL);
    int x = (int)(l >> 32);
    int y = (int)l;
    
    0 讨论(0)
提交回复
热议问题