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