java 十 = 0_从零学java笔录-第10篇 数据类型(四)
本文是《凱哥陪你學(xué)系列之java基礎(chǔ)篇》
感謝:
感謝網(wǎng)友:志遠(yuǎn)162。在上一篇中對錯(cuò)誤指出。
在上篇中模運(yùn)算正負(fù)號和分子保持一致而不是分母。希望大家記住
本篇主要內(nèi)容:
1:比較運(yùn)算
2:邏輯運(yùn)算
3:位運(yùn)算
4:三元運(yùn)算
1: 比較運(yùn)算:
比較運(yùn)算符:等于,不等于,大于,大于等于,小于,小于等于。
在java中比較兩個(gè)數(shù)等于使用的是雙等號。比如 3==2
注意:比較運(yùn)算符運(yùn)算的結(jié)果是true或是false。
其中 instanceof這個(gè)先不用管。這個(gè)以后學(xué)習(xí)中需要的
2 邏輯運(yùn)算符
Java中邏輯運(yùn)算
邏輯運(yùn)算符的作用:
用于連接兩個(gè)boolean類型的表達(dá)式。
比如在數(shù)學(xué)中我們 2
但是 如果寫出 x>2,x<5 這兩個(gè)表達(dá)式和 2
所以就出現(xiàn)了邏輯運(yùn)算符。
那么用java表達(dá) x>2 其 x<5怎么表達(dá)?
(x>2 & x<5)這樣就OK了。
代碼演示:
class LogicDemo{
public static void main (String [] args){
int a = 3;
int b = 6;
System.out.println(a>2&a<5);
System.out.println(b>2&b<5);
}
}
運(yùn)行結(jié)果:
分析原因:
System.out.println(a>2&a<5);為什么是true?
因?yàn)?#xff1a; a=3.而3>2.&符號左邊是true 。又因?yàn)?3<5 .&符號右邊是true.
所以&符號左右兩邊都是true。所以就是true.
System.out.println(b>2&b<5);為什么是false?
因?yàn)?#xff1a; b=6.而6>2.&符號左邊是true 。而右邊 6<5是false.
所以&符號左右兩邊就是 true和false。而輸出的是false.
所以我們可以總結(jié)出&符號的特點(diǎn)
總結(jié)與(&):
&:與 或是叫 且。而且的意思
總結(jié)與(&):
&:與 或是叫 且。而且的意思
文字表達(dá):
true & true = true;
true & false = false;
false & true = false;
false & false = false;
規(guī)律:
&符號:兩邊只要有一邊是false結(jié)果必為false.
只有兩邊都是true,結(jié)果才是true。
總結(jié)與(|)
l:與、或者。就是或者的意思
文字表達(dá):
true & true = true;
true & false = true;
false & true = true;
false & false = true;
規(guī)律:
|符號:兩邊只要有一邊是true結(jié)果必為tr.ue
只有兩邊都是false,結(jié)果才是false。
與和或使用場景
當(dāng)要取中間值或是數(shù)據(jù)(也就是區(qū)間值)的時(shí)候使用 & 。
比如 想要3 和4 那么就是 2
當(dāng)要取不是區(qū)間值,使用或
比如 想要不是 3和4 那么就是 x<2 | x>5。取小于2或者是大于5的數(shù)
總結(jié)異或(^)
異或:
true & true = false;
true & false = true;
false & true = true;
false & false = true;
^和|的區(qū)別:
或是 兩邊都是真的時(shí)候結(jié)果依然為真
但是異或,兩邊都是真的時(shí)候 結(jié)果卻為false.
總結(jié)非運(yùn)算(!)
非運(yùn)算取相反的值。
!ture = false;
!false = true;
短路邏輯運(yùn)算:(面試題)
&& 雙與其特點(diǎn)和單個(gè)&特點(diǎn)相同的。
但是只要有一邊為假就不比較另一邊了。
比如:int i = 1;
i>2 && i<5;
這個(gè)運(yùn)算過程就是,先比較 1>2 結(jié)果是false.當(dāng)使用&& 的時(shí)候就不在比較右邊了。
但是如果使用& 還需要比較右邊。所以&& 起到短路效果。
|| 和 |的效果是一樣。但是||起到短路效果的。
為什么會出現(xiàn) &&或是是||?
因?yàn)檫@個(gè)從效率上來講比單&效率高。
&&和&區(qū)別:
&& 只能做邏輯運(yùn)算符,起到短路效果。
& 不僅是邏輯運(yùn)算符還是位運(yùn)算符。
&:無論左邊結(jié)果是什么,右邊都參與運(yùn)算。
&&:當(dāng)左邊是false時(shí)候,右邊就不參與運(yùn)算了。
||和|
|:無論左邊結(jié)果是什么,右邊都參與運(yùn)算
||:如果左邊是真,右邊不參與運(yùn)算。
|:還是位運(yùn)算的
位運(yùn)算符
Java中位運(yùn)算符:
與運(yùn)算:
6&3.
因?yàn)槲贿\(yùn)算直接對應(yīng)的是二進(jìn)制。
而我們知道6和3是int類型。而int類型在內(nèi)存中是4個(gè)字節(jié)。32位二進(jìn)制。
所以,6&3在內(nèi)存中:
簡寫:
分析為什么 6&3 結(jié)果是十進(jìn)制的2
0:false
1:true
而我們有知道&運(yùn)算的特點(diǎn)。只要有一個(gè)為false結(jié)果必為false.
所以運(yùn)算的結(jié)果就是二進(jìn)制的010 對應(yīng)的十進(jìn)制就是2
同理 6|3 = 7
異或運(yùn)算:
根據(jù)異或特點(diǎn):兩邊相同即為假,兩邊不同才為真。
所以 6^3 = 5
6^3^3=6
所以,異或特點(diǎn):
當(dāng)一個(gè)數(shù)異或兩一個(gè)數(shù)兩次后,結(jié)果還是這個(gè)數(shù)本身。
異或作用:
作為加密的一種方式。
比如數(shù)字6 先用3異或一次后得到新的二進(jìn)制。然后在網(wǎng)絡(luò)上傳輸。等接受方拿到異或后的新二進(jìn)制在和3進(jìn)行異或后,就得到原來的數(shù)據(jù)6了。
反碼:
其實(shí)就是取反后的二進(jìn)制碼
6的反碼(~6): 是-7
理解:
反碼就是取反后在加1.
左移:
3>>2:含義 3左移兩位:
在內(nèi)存中處理過程:
3在內(nèi)存中完整的表示方式:
說明:兩邊的||表示在內(nèi)存中臨界邊。
左移兩位
得到新的二進(jìn)制就是1100 轉(zhuǎn)成十進(jìn)制就是12
那么3<<3 = 24
分析原因:
因?yàn)檫@里操作的是二進(jìn)制。所以左移一位就是2的1次方。左移3位就是2(3)
所以 :
總結(jié):
左移N位其實(shí)就是該數(shù)乘以2的N次冪
所以 <
右移:
6>>1 =
6在內(nèi)存中二進(jìn)制:
右移一位:
右移一位后,最高位就空出一位。注意這里不能直接用0補(bǔ)。
如果是整數(shù),使用0補(bǔ),如果是負(fù)數(shù)使用1補(bǔ)。
也就是:原數(shù)據(jù)最高位是什么,右移后,最高位和原數(shù)據(jù)最高位相同。
對應(yīng)二進(jìn)制變成110對應(yīng)的十進(jìn)制就是3.
6>>2=1
找規(guī)律:
右移N位,其實(shí)就是該數(shù)除以2的N次冪
無符號右移:>>>
無符號右移與右移區(qū)別:
無符號右移,無論原數(shù)據(jù)最高位是什么,右移完成后最高位都用0補(bǔ)。
注意:
左移和右移,都操作的是二進(jìn)制數(shù)據(jù)。
位運(yùn)算練習(xí):
練習(xí)1:
最優(yōu)效率的方式算出2乘以8等于幾?
內(nèi)存中運(yùn)算過程
分析得到 8=2(3).8等于2的3次方
所以 2*8 = 2*2(3)
2在內(nèi)存中二進(jìn)制表現(xiàn):
2(3):2的3次方其實(shí)就是2左移3位。即時(shí):2<<3
2的二進(jìn)制左移三位后:
后面不夠用0補(bǔ)全。
結(jié)果
有效的就是10000對應(yīng)的十進(jìn)制就是16。
所以代碼:
練習(xí)2:
對兩個(gè)整數(shù)變量的值進(jìn)行互換(注意:不需要第三方變量)
分析:
正常的,使用第三方變量互換原理。
題目明確不能使用第三方變量。
方式1:
int a = 3,b = 5;
分析:
a =? a+b; //此時(shí)a = 8
b =? a-b;//此時(shí)b = 8-5 = 3
a =? a – b;//因?yàn)樵谏弦徊?b = 3 所以此時(shí) a = 8-3 = 5.
這樣輸出的 a = 5,b=3.a 和 b就互換了。
雖然使用這種方式也可實(shí)現(xiàn)a與b的互換。但是如果a和b都比較大
那么 a+b就有可能超出int范圍。這樣就會出現(xiàn)類型強(qiáng)制轉(zhuǎn)換或是精度丟失的錯(cuò)誤。
方案二:
使用異或運(yùn)算。
從上面講解我們知道 一個(gè)數(shù)異或另一個(gè)數(shù)兩次之后,結(jié)果還是這個(gè)數(shù)的本身。
所以:
分析原因:
a = a^b;??? //這個(gè)沒什么說的 此時(shí)a = a^b了
b = a^b;??? //這個(gè)時(shí)候因?yàn)樯弦徊?a= a^b了。此時(shí) b = ((a^b)^b)。其實(shí) b = a
a = a^b;??? //有第一步 a = a^b ,有第二步 b = a。所以此時(shí) a =( (a^b)^a).其實(shí)就是 a =b
將a b數(shù)據(jù)帶入:
三元運(yùn)算符
三元運(yùn)算符(三目運(yùn)算):三個(gè)元素參與運(yùn)算的符號。
代碼:
練習(xí):
需求:比較兩個(gè)整數(shù),輸出其中交大的
代碼:
/**
三元運(yùn)算符練習(xí):
需求:
比較兩個(gè)整數(shù),輸出其中交大的
**/
class OperatTest{
public static void main (String [] args){
int a = 5;
int b = 3;
System.out.println("a,b中較大的值為:"+ (a>b?a:b));
}
}
輸出結(jié)果為:
練習(xí)二:
需求:求三個(gè)整數(shù)中較大的。
代碼(部分):
//求三個(gè)整數(shù)中較大的。
int o =3,p =6,q = 1;
int temp = (o>p?o:p);
int max = temp>q?temp:q;
System.out.println("三個(gè)數(shù)中較大的值為:"+ max);
結(jié)果:
ps:歡迎關(guān)注凱哥微信公眾號:凱哥Java
?
與50位技術(shù)專家面對面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的java 十 = 0_从零学java笔录-第10篇 数据类型(四)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 430平方米面积的墙面需要多少方得保温板
- 下一篇: 我的世界java版怎么装在u盘_我的世界