日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java整型和浮点型_Java基本的程序结构设计 整形和浮点型

發布時間:2023/12/1 java 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java整型和浮点型_Java基本的程序结构设计 整形和浮点型 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

整形:

int 4字節

short 2字節

long 8字節

byte 1字節

int的大小差不多是20億。

整形計算

如果兩個int進行加減乘除數學運算的時候,最終的結果仍然是int,有可能出現了溢出,那么結果就不是我們想要的了。如下:

System.out.println("Integer.MAX_VALUE: " + Integer.MAX_VALUE);

//兩個int相加 結果仍然是int 溢出

System.out.println("Integer.MAX_VALUE - Integer.MIN_VALUE: " + (Integer.MAX_VALUE - Integer.MIN_VALUE));

//兩個int相加 結果仍然是int 溢出

System.out.println("Integer.MAX_VALUE + 1 : " + (Integer.MAX_VALUE + 1));

//int + long 結果是long 沒有溢出

System.out.println("Integer.MAX_VALUE + 1L: " + (Integer.MAX_VALUE + 1L));

//int + long 結果是long 沒有溢出

System.out.println("(long)Integer.MAX_VALUE + 1: " + ((long)Integer.MAX_VALUE + 1));

輸出:

Integer.MAX_VALUE: 2147483647

Integer.MAX_VALUE - Integer.MIN_VALUE: -1

Integer.MAX_VALUE + 1 : -2147483648

Integer.MAX_VALUE + 1L: 2147483648

(long)Integer.MAX_VALUE + 1: 2147483648

當然,long相加也有這種情況。

兩個int進行除法運算,得到的結果是int,不是四舍五入,而是直接截斷。其他整形也是一樣。

int除法,如果除數是0,那么將會報java.lang.ArithmeticException錯誤。其他整形也是一樣。

long后綴L。

16進制:前綴0x

8進制:前綴0

盡量不要使用8進制。

java沒有任何無符號類型。unsigned type。

浮點型:

float:4字節

double:8字節

關于浮點數:

浮點數是屬于有理數中某特定子集的數的數字表示,在計算機中用以近似表示任意某個實數。具體的說,這個實數由一個整數或定點數(即尾數)乘以某個基數(計算機中通常是2)的整數次冪得到,這種表示方法類似于基數為10的科學計數法。

一個浮點數a由兩個數m和e來表示:a = m × b^e。在任意一個這樣的系統中,我們選擇一個基數b(記數系統的基)和精度p(即使用多少位來存儲)。m(即尾數)是形如±d.ddd...ddd的p位數(每一位是一個介于0到b-1之間的整數,包括0和b-1)。如果m的第一位是非0整數,m稱作規格化的。有一些描述使用一個單獨的符號位(s 代表+或者-)來表示正負,這樣m必須是正的。e是指數。

結構

由此可以看出,在計算機中表示一個浮點數,其結構如下:

階碼部分(定點整數)

int是精確的,一個n位的精確存儲只能存儲2的n次方,因為有正負和0,所以int的取值范圍是負2的n次方到2的n次方-1。

float的取值范圍是3.4028235E38,有效數字6-7位,以F結尾,double的取值范圍是1.7976931348623157E308,有效數字15位,以D結尾。

float是不精確的,所以有有效數字的概念,如float有32位,其實是和int是一樣的。int的最大值是2147483647,從十進制來講,只有10位,float的位數中,一部分要用來定義階碼部分,留給表示位數部分的位數就減少了,劃算成10進制,那么能存儲的有效數字也就6-7位。如果超過有效位數,那么就不精確了。如123456789123456789和123456789120000000用float來存儲,在其實都是123456789120000000f,也就是說超過6-7位精度的部分丟失了。如下:

System.out.println(123456789123456789f);

System.out.println(123456789120000000f);

結果:

1.23456791E17

1.23456791E17

具體分析,來自網上:

一個float4字節32位,分為三部分:符號位,指數位,尾數位。

(1).符號位(S):最高位(31位)為符號位,表示整個浮點數的正負,0為正,1為負;

(2).指數位(E):23-30位共8位為指數位,這里指數的底數規定為2(取值范圍:0~255)。這一部分的最終結果格式為:2E?127,即范圍-127~128。另外,標準中,還規定了,當指數位8位全0或全1的時候,浮點數為非正規形式(這個時候尾數不一樣了),所以指數位真正范圍為:-126~127。

(3).尾數位(M):0-22位共23位為尾數位,表示小數部分的尾數,即形式為1.M或0.M,至于什么時候是1,什么時候是0,則由指數和尾數共同決定。 小數部分最高有效位是1的數被稱為正規(規格化)形式。小數部分最高有效位是0的數被稱為非正規(非規格化)形式,其他情況是特殊值。 最終float的值 =?(?1)S?(2E?127)?(1.M)。

float的尾數:23位,其范圍為:0~223,而223=8388608=106.92,所以float的精度為6~7位,能保證6位為絕對精確,7位一般也是正確的,8位就不一定了(但不是說8位就絕對不對了),注意這里的6~7位是有效小數位(大的數你先需要轉換成小數的指數形式,例如:8317637.5,其有效小數位:8.3176375E6,七位),而有效位(從第一個不為0的開始數)是7~8位,是包括整數位的,像8317637.5,你不轉換,則要從有效位的角度來看,有8位有效位。

因為float只有6-7位有效數字,假如說咱們考慮為7位,所以平時使用的時候,應該是9999999這個大小內是有效的,大約999萬,如果要有兩位小數的話,那么就是99999.99,就只有10萬了。

一旦超過了這個范圍,就要開始損失了,損失從右側開始的,右側的數字慢慢變成了0.如12345678.92就變成了12345679.00。

double的精度是15位,對應所有的非精確運算一般都夠了。

浮點型計算

浮點數的運算和整形差別很大,有一些特殊的邏輯。

浮點數有三種特殊的值,對于float來說有:

Float.POSITIVE_INFINITY:正無窮大

Float.NEGATIVE_INFINITY:負無窮大

Float.NaN:非數字

除數為0,結果為無窮大。

0f/0f,或者負數的平方根結果為NaN。

溢出:超過Float.MAX_VALUE太多,就變成了Float.POSITIVE_INFINITY,小于Float.MIN_VALUE太多,就變成了Float.NEGATIVE_INFINITY。這里說太多,是因為溢出不太多的話,float是識別不到的,得到的結果還是Float.MAX_VALUE。如下:

package com.zjf;

public class Test {

public static void main(String[] args) {

System.out.println(Float.MAX_VALUE);

System.out.println(Float.MAX_VALUE + 10000);

System.out.println(Float.MAX_VALUE * 2);

System.out.println((double)Float.MAX_VALUE * 2);

System.out.println(Float.MAX_VALUE * 2D);

System.out.println(Float.POSITIVE_INFINITY);

System.out.println(Float.NEGATIVE_INFINITY);

System.out.println(0f/0f);

System.out.println(10f/0f);

}

}

結果如下:

3.4028235E38

3.4028235E38

Infinity

6.805646932770577E38

6.805646932770577E38

Infinity

-Infinity

NaN

Infinity

boolean類型

java的布爾值和整型值之間不能做轉換。也就是說0不代表false。這點和c++不一樣,和JavaScript也不一樣。

運算符

+ - * / %(求余)

在進行這些操作的時候,兩個都是整形的話代表整數操作,結果也是整數,否是是浮點數。

ps:可移植性是java語言的設計目標之一。但是java的浮點運算在不同的處理器上的的結算結果是有差別的(特別是intel和非intel處理器之間的差別)。

java的邏輯運算符&&和||是按照"短路"方式求值的。

強制轉換

整數可以強制裝換為浮點數,但是可能會損失精度,但是在有效數字范圍內的部分還是準確的。

浮點數可以強制裝換為整數,是采用的直接截斷的方式。不是四舍五入。

浮點數可以強制裝換為整數,如果超過了整數的取值范圍,那么結果是不可預知的。

package com.zjf;

public class Test {

public static void main(String[] args) {

float f = 1234567891234.23F;

int i = (int)f;

long l = (long)f;

System.out.println(i);

System.out.println(l);

}

}

結果:

2147483647

1234567954432

事實上,不只是浮點型和整形的轉換,java中數值的轉換,如果轉換的結果超過了接收方的取值范圍,就可能得到一個完全不同的值。

總結

以上是生活随笔為你收集整理的java整型和浮点型_Java基本的程序结构设计 整形和浮点型的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。