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

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

為什么 bigInteger 沒有 -1 的位長度?

為什么 bigInteger 沒有 -1 的位長度?

郎朗坤 2023-09-13 17:00:54
為什么在Java中BigInteger.bitLength()打?。?-1System.out.println(BigInteger.valueOf(-1).bitLength());BigInteger 的源代碼中有一條注釋說:bitLength 尚未初始化public int bitLength() {        int n = bitLengthPlusOne - 1;        if (n == -1) { // bitLength not initialized yet            int[] m = mag;            int len = m.length;            if (len == 0) {                n = 0; // offset by one to initialize            }
查看完整描述

2 回答

?
茅侃侃

TA貢獻1842條經驗 獲得超22個贊

檢查該方法的文檔BigInteger.bitLength()

返回此 BigInteger 的最小二進制補碼表示形式的位數,不包括符號位。[...]

您需要零個“值”位來表示 value?0?;旧希恪安恍枰鋈魏问虑椤?,你就有了價值0。使用符號位,您可以在0和之間切換-1(與補碼類似)。

當您擁有需要一個“值”位的值時1,因此BigInteger.bitLength()將返回1BigInteger value?1。檢查以下for循環及其生成的輸出:

for (int i=-16; i<=16; i++) {

? ? BigInteger x = BigInteger.valueOf(i);

? ? System.out.println(x+"| bitlength: "+x.bitLength());? ??

}

輸出是:


-16| bitlength: 4

-15| bitlength: 4

-14| bitlength: 4

-13| bitlength: 4

-12| bitlength: 4

-11| bitlength: 4

-10| bitlength: 4

-9| bitlength: 4

-8| bitlength: 3

-7| bitlength: 3

-6| bitlength: 3

-5| bitlength: 3

-4| bitlength: 2

-3| bitlength: 2

-2| bitlength: 1

-1| bitlength: 0

0| bitlength: 0? /* 0b */

1| bitlength: 1? /* 0b1 */

2| bitlength: 2

3| bitlength: 2? /* 0b11 */

4| bitlength: 3

5| bitlength: 3

6| bitlength: 3

7| bitlength: 3? /* 0b111 */

8| bitlength: 4

9| bitlength: 4

10| bitlength: 4

11| bitlength: 4

12| bitlength: 4

13| bitlength: 4

14| bitlength: 4

15| bitlength: 4 /* 0b1111 */

16| bitlength: 5


查看完整回答
反對 回復 2023-09-13
?
臨摹微笑

TA貢獻1982條經驗 獲得超2個贊

返回最小的補碼(?1),不包括符號位,在本例中符號位為 0。-1 的二進制值為0xFFFF.../?0b1111...,其補碼(最大值)變為0,與 相加1成為二進制補碼(補碼 + 1)。

但是,n變量 from#bitLength不是 BigInteger 的值,而是存儲的 bitLength 字段的值減 1(0這意味著尚未計算)。因此,返回aBigInteger的值與使用 -1 作為標記值的它們是巧合的。-10#bitLength

他們使用這個值來表示該字段還沒有被延遲初始化,然后該bitLength字段被設置為正確的值(0)。請記住,BigInteger是不可變的,因此當計算 bitLength 時,它在該實例中永遠不會改變。


查看完整回答
反對 回復 2023-09-13
  • 2 回答
  • 0 關注
  • 153 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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