亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Java 中的 128 位表示和原語

Java 中的 128 位表示和原語

喵喔喔 2021-12-10 16:20:45
我需要在java中表示128位int鍵,比如0x9c1f03a0d9cf510f2765bd0f226ff5dc我知道理論上如何表示 128 位變量.. 切成 2 個 64 位整數或四個 32 位整數。但是我需要這種比較鍵的表示(k1 < k2 和 k1 == k2),我不知道如何將一個鍵拆分為幾個 int,我也不知道如何將我的 hexa 鍵拆分為 2 或 4 個 int。我完全不知道位操作和轉換,一些解釋會非常有用
查看完整描述

3 回答

?
holdtom

TA貢獻1805條經驗 獲得超10個贊

好消息!Java 提供了任意精度的整數類型。該BigInteger(String, int)構造可以用來把你的十六進制,并進行128位的值。進一步BigInteger是Comparable。你可以像這樣使用它


BigInteger bi = new BigInteger("9c1f03a0d9cf510f2765bd0f226ff5dc", 16);

BigInteger bi2 = bi.add(BigInteger.ONE);

if (bi2.compareTo(bi) > 0) {

    System.out.println("Like this");

}

輸出


Like this


查看完整回答
反對 回復 2021-12-10
?
慕絲7291255

TA貢獻1859條經驗 獲得超6個贊

你可以使用BigInteger。


String hexString = "9c1f03a0d9cf510f2765bd0f226ff5dc";

BigInteger bigInt = new BigInteger(hexString, 16);

System.out.println(bigInt);


查看完整回答
反對 回復 2021-12-10
?
繁華開滿天機

TA貢獻1816條經驗 獲得超4個贊

使用Long.compareUnsigned(以及其他將longs 視為無符號的方法),小技巧不再是必不可少的。您可以只實施標準的多元素比較,首先處理更重要的值。


但是,您應該long優先使用s,而不是ints,因為這將顯著減少 64 位 CPU 完成的工作,而與 32 位 CPU 沒有太大區別。


對于compareTowith long[]s in little-endian:


public static int keyCompareTo(final long[] a, final long[] b) {

    final int highComp = Long.compareUnsigned(a[1], b[1]);

    if (highComp != 0) return highComp;

    else return Long.compareUnsigned(a[0], b[0]);

}

或者,使用一個對象:


public class Key implements Comparable<Key> {

    final protected long high;

    final protected long low;


    public int compareTo(final Key other) {

        if (other == null) throw new NullPointerException();

        final int highComp = Long.compareUnsigned(a.high, b.high);

        if (highComp != 0) return highComp;

        else return Long.compareUnsigned(a.low, b.low);

    }

}

對于平等:


a[0] == b[0] && a[1] == b[1]

a.high == b.high && a.low == b.low

對于小于:


final int highComp = Long.compareUnsigned(a[1], b[1]);

final boolean lessThan = highComp < 0 || (highComp == 0 && Long.compareUnsigned(a[0], b[0]) < 0);

final int highComp = Long.compareUnsigned(a.high, b.high);

final boolean lessThan = highComp < 0 || (highComp == 0 && Long.compareUnsigned(a.low, b.low) < 0);


查看完整回答
反對 回復 2021-12-10
  • 3 回答
  • 0 關注
  • 456 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號