簡體   English   中英

Java打印Integer Vs Integer.toHexString():不同的輸出

[英]Java printing Integer Vs Integer.toHexString() : Different outputs

在確定Java如何存儲和檢索整數時,我遺漏了一些東西。 我有以下代碼

public class Test1 {
    public static void main(String args[]) {

        int a = 100;

        int negateA = (a | 0x80000000);

        System.out.println("Negative A: " + negateA);
        System.out.println("Negative A in HEX: " + Integer.toHexString(negateA));

    }
}

輸出:

Negative A: -2147483548
Negative A in HEX: 80000064

從輸出中,HEX中的值對我有意義,因為我設置整數的最高有效位,其余值表示其十進制值為100,這是我最初設置的。

我不明白為什么當我打印整數時我得到-2147483548

java內部存儲數字與檢索數字之間有區別嗎?

這不是你如何從正數獲得負數! Java使用兩個補碼

為了反轉int的符號(無論是初始正數還是負數),您可以:

~val + 1

對於long s, byte s和short s也是如此。

它不起作用的唯一數字是0x80000000,即Integer.MIN_VALUE ,即-2 ^ 31。 但這是n位二進制補碼表示的特征之一:它可以表示從-2 ^(n-1)到2 ^(n-1)-1的數字。

我們以1為例:

0x00000001 // i = 1
0xFFFFFFFE // ~i
0xFFFFFFFF // ~i + 1 == -1

0xFFFFFFFF // i = -1
0x00000000 // ~i
0x00000001 // ~i + 1 == 1

區別在於“它是如何存儲”和“何時被檢索”,但它歸結為在轉換為十進制和二進制時如何解釋內部表示。 在第一種情況下,它被解釋為二進制補碼,產生負數。 使用Integer.toHexString將其轉換為十六進制時,它將被解釋為無符號值。 從Integer.toHexString的javadoc:

如果參數為負,則無符號整數值是參數加23 ^ 2; 否則,它等於參數

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM