Java程式設計:Integer的取值範圍(-2^31~2^31-1)分析
在 Java 中 Integer 的最小值、最大值定義如下:
/**
* A constant holding the minimum value an {@code int} can
* have, -2<sup>31</sup>.
*/
@Native public static final int MIN_VALUE = 0x80000000;
/**
* A constant holding the maximum value an {@code int} can
* have, 2<sup>31</sup>-1.
*/
@Native public static final int MAX_VALUE = 0x7fffffff;
最小值為 -2^31,最大值為 2^31-1,為什麼呢?推導過程如下:
Integer 實際佔用的二進位制碼的位數
一個 Integer 型別佔 4 位元組,一個位元組佔 8 位二進位制碼,因此一個 Integer 總共佔 32 位二進位制碼。去除第一位的符號位,剩下 31 位來表示數值。
原碼、反碼、補碼
在計算機中,資料是由二進位制補碼進行儲存的,在 Java 程式碼中我們看到的 “0x80000000”、“0x7fffffff”都是補碼的形式,通過轉換為原碼獲取它們的真實值。
MIN_VALUE = 0x80000000 ; //補碼
MAX_VALUE = 0x7fffffff; //補碼
轉換公式:
- 當原碼為正數的時候,正數的原碼、反碼、補碼都相同。
正數:1
原碼:0000 0000 0000 0000 0000 0000 0000 0001
反碼:0000 0000 0000 0000 0000 0000 0000 0001
補碼:0000 0000 0000 0000 0000 0000 0000 0001
- 當原碼為負數的時候,反碼為去除符號位按位取反,補碼為去除符號位按位取反再加1。
負數:-1
原碼:1000 0000 0000 0000 0000 0000 0000 0001
反碼:1111 1111 1111 1111 1111 1111 1111 1110
補碼:1111 1111 1111 1111 1111 1111 1111 1111
因此在程式中,我們定義 16 進位制整形數時, 0x00000001
0xFFFFFFFF
表示 -1。
最大值為什麼是 2^31-1,不是 2^31
原碼:0111 1111 1111 1111 1111 1111 1111 1111
反碼:0111 1111 1111 1111 1111 1111 1111 1111
補碼:0111 1111 1111 1111 1111 1111 1111 1111
計算機中可表示的整數最大值的補碼為“0111 1111 1111 1111 1111 1111 1111 1111”,正數的補碼與原碼一致,原碼也為“0111 1111 1111 1111 1111 1111 1111 1111”,轉換為十進位制數為 2^31-1。
最小值為什麼是 -2^31,而不是 -(2^31-1)
我們依次推算負數值,如下:
原碼:1000 0000 0000 0000 0000 0000 0000 0001 -1
反碼:1000 0000 0000 0000 0000 0000 0000 0000
補碼:1111 1111 1111 1111 1111 1111 1111 1111原碼:1000 0000 0000 0000 0000 0000 0000 0010 -2
反碼:1000 0000 0000 0000 0000 0000 0000 0001
補碼:1111 1111 1111 1111 1111 1111 1111 1110原碼:1111 1111 1111 1111 1111 1111 1111 1111 -2^31 + 1
反碼:1111 1111 1111 1111 1111 1111 1111 1110
補碼:1000 0000 0000 0000 0000 0000 0000 0001原碼:1000 0000 0000 0000 0000 0000 0000 0000 -0 約定為 -2^31
反碼:1111 1111 1111 1111 1111 1111 1111 1111
補碼:1000 0000 0000 0000 0000 0000 0000 0000
由此可以推算,Integer 的最小值為 -2^31。
相關推薦
Java程式設計:Integer的取值範圍(-2^31~2^31-1)分析
在 Java 中 Integer 的最小值、最大值定義如下: /** * A constant holding the minimum value an {@code int} can * have, -2<sup>31</sup&g
談談gnuplot(五):座標取值範圍及刻度
http://qbk378.lofter.com/post/b28f6_14f062 我們從上一講結束時的影象開始: gnuplot> set samples 500 gnuplot> set xlabel "X" gnuplot> set ylabel "Y" gnupl
【原創】給定隨機數的取值範圍(最小值、最大值),且要求多次取得的隨機數最後的結果有一個固定的平均值
給定隨機數的取值範圍(最小值、最大值),且要求多次取得的隨機數最後的結果有一個固定的平均值。 演算法如下: /****** * author ztg 281099678 2018-12-06 * @param $min float 範圍最小值 * @param $max
java資料型別,取值範圍,引用型別解析
與javascript不同,Java是強型別語言,在定義變數前需要宣告資料型別。主要分兩種資料型別:基本資料型別和引用資料型別。 1、基本資料型別分析: 基本資料型別
c語言==字元陣列與字串,char的取值範圍(1)
求char型別陣列的strlen長度 昨天老師給了一道題目 #include <stdio.h> #include "string.h" int main() { int i; char a[1000]; fo
Java中float的取值範圍
規格化表示 java中的浮點數採用的事IEEE Standard 754 Floating Point Numbers標準,該標準的規範可以參考http://blog.csdn.net/treeroot/articles/94752.aspx. float佔用4個位元組,和int是一樣,
整形資料取值範圍(int、long、long long)
unsigned int 0~4294967295 int 2147483648~2147483647 unsigned long 0~4294967295 long 214748
Java基本資料型別取值範圍,為什麼String 不是基本資料型別,char的取值範圍為什麼沒有負數
一、在JAVA中一共有八種基本資料型別,他們分別是 byte、short、int、long、float、double、char、boolean 整型 其中byte、short、int、long都是表示整數的,只不過他們的取值範圍不一樣 byte的取
Java中float/double取值範圍與精度
Java浮點數 浮點數結構 要說清楚Java浮點數的取值範圍與其精度,必須先了解浮點數的表示方法,浮點數的結構組成,之所以會有這種所謂的結構,是因為機器只認識01,你想表示小數,你要機器認識小數點這個東西,必須採用某種方法,比如,簡單點的,float
Java中float的取值範圍為什麼是那麼大?
float佔用4個位元組,和int是一樣,也就是32bit. 第1個bit表示符號,0表示正數,1表示負數,這個很好理解,不用多管. 第2-9個bit表示指數,一共8為(可以表示0-255),這裡的底數是2,為了同時表示正數和負數,這裡要減去127的
各種資料型別的取值範圍(自查)
在寫程式的過程中我們有時候會處理一些極大地資料,這時候就會出現一些困惑各種資料型別的大小,宣告的時候讓自己很謹慎, 於是碰到較大的數值就直接long型別的的變數就聲明瞭,在C函式庫Limits中包含著對於所用編譯器中各個資料型別的取值範圍。下面是程式程式碼。/
C++各資料型別取值範圍(備忘)--32位作業系統
各資料型別取值範圍 bool型為布林型,佔1個位元組,取值0或1。 BOOL型為int型,一般認為佔4個位元組,取值TRUE/FALSE/ERROR。 sbyte型為有符號8位整數,佔1個位元組,取值範圍在128~127之間。 bytet型為無符號16位
Java 中 float 的取值範圍
. float佔用4個位元組,和int是一樣,也就是32bit. 第1個bit表示符號,0表示正數,1表示負數,這個很好理解,不用多管. 第2-9個bit表示指數,一共8位(可以表示0-255),這裡的底數是2,為了同時表示正數和負數,這裡要減去127的偏移量.這樣的話範圍就是(-127到1
java中為什麽byte的取值範圍是-128到+127
進制數 符號位 為什麽 絕對值 www .html tar 同學 自己 概念:java中用補碼表示二進制數,補碼的最高位是符號位,最高位為“0”表示正數,最高位為“1”表示負數。正數補碼為其本身;負數補碼為其絕對值各位取反加1
JAVA基本類型大小與取值範圍?
false 特殊 數據類型 字節 true ima 指令 它的 ges 布爾類型boolean比較特殊,盡管Java虛擬機定義了boolean類型,但虛擬機對boolean類型的支持是有限的,沒有為boolean值單獨設計JVM指令。操作布爾值的表達式在編譯之後,它使用的
Java byte 類型的取值範圍是-128~127
com 基本數據類型 single static 數據 數據類型 blank tle -128 為什麽Java byte 類型的取值範圍是-128~127 : http://blog.163.com/[email protected]/blog/static/47
Java數據類型及對應取值範圍
小數 日常 java 方法 而且 div 滿足 archive 大寫 Java數據類型及對應取值範圍 在Java中,數據類型分為兩大種:基本數據類型(值類型)和包裝類型(引用數據類型)。基本數據類型不是對象,不能調用toString()、hashCode()、getCl
【原始碼追蹤】SparkStreaming 中用 Direct 方式每次從 Kafka 拉取多少條資料(offset取值範圍)
我們知道 SparkStreaming 用 Direct 的方式拉取 Kafka 資料時,是根據 kafka 中的 fromOffsets 和 untilOffsets 來進行獲取資料的,而 fromOffsets 一般都是需要我們自己管理的,而每批次的 untilOffsets 是由
SQL 用於各種資料庫的資料型別(轉載) sqlserver 資料型別 取值範圍 長度
SQL 用於各種資料庫的資料型別 來源 http://www.runoob.com/sql/sql-datatypes.html 面向資料庫程式設計中,資料型別的取值範圍、長度,可能是需要經常檢視的資料。 Microsoft Access、MySQL 和 SQL S
Java程式設計:刪除 List 元素的三種正確方法(面試與開發必備)
刪除 List 中的元素會產生兩個問題: 刪除元素後 List 的元素數量會發生變化; 對 List 進行刪除操作可能會產生併發問題; 我們通過程式碼示例演示正確的刪除邏輯 package com.ips.list; import java.util.ArrayList; import jav