java中的運算,+-* /% | ^ & >>


java中運算都是操作符號,那么整形默認為int,雙精度默認為都double

整數

看案例:

 

 無法編譯通過:操作默認為int,接受結果為int,所以這個地方編譯無法通過,所以需要強制類型轉換

 

再看案例:

 

 

 

 

再看雙精度:

 

 這種是可以的,再看

 

 這也是可以的,看結果:

 

 精度損失。再看

 

 結果:

 

 再看多種案例:

 

 看結果:

 

 再看案例 :

 

 看結果

 

 那么會什么會出現這么多問題呢,原因

在數據結果,轉為二進制的時候,比如0.3  轉換為二進制如這么轉換的

0.3*2->0.6->0.6*2>1.2   二進制為1

將小數點后面的0.2繼續進行

0.2*2》0.4>0.8>1.6>二進制為1

再進行

0.6*2》1.2 二進制1 再進行

0.2 *2》0.4》0.8》1.6 如此循環下去,導致最后會進行精度損失,

所以如果項目中要有這樣的,所以需要進行采用dicmal類型來操作精度。避免精度損失

 

| ^ & 運算解析:

看案例:

 

 

看結果:

 

 

這是為什么呢。

分析

第一個為或運算,第二個為與運算,第三個為亦或預算

3轉化為二進制的  0000 0011

1轉為二進制         0000 0001

或,只要其中一個為正確那么就正確,在進行運算的時候,只要其中一個為1,那么就為1

所以 1|3   結果為0000 0011  即結果為3

 

與 只要兩個都正確,那么正確,在運算中只要兩個相同就為1,另外為0

1&3  結果為0000 0001  所以結果為1

 

亦或 只要兩個不同才正確,所以計算時候,只有兩個不同才為1,另外為0

1^3  結果0000 0010 所以結果為2

 

位運算

看案例:

 

 

一個是左移,一個是右移

1 二進制 0000 0001   向右移 3位 所以 0000 0000 所以結果為0

左移 0000 1000 所以為 8

再看案例:

 

 

9的二進制為 0000 1001

左移移動 0100 1000 結果為2e6+2e3=64+8=72     計算規則是這樣的,首先最后一個為2的0次方,那么第七位就為2的6次方,第四位就為2的3方法

右移 0000 0001 所以結果為1

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM