真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

從0開始學(xué)大數(shù)據(jù)-Java運算符(3)-創(chuàng)新互聯(lián)

我們從零開始學(xué)習(xí)大數(shù)據(jù)技術(shù),從java基礎(chǔ),到Linux技術(shù)涉獵,再深入到大數(shù)據(jù)技術(shù)的Hadoop、Spark、Storm技術(shù),最后到大數(shù)據(jù)企業(yè)平臺的搭建,層層遞進(jìn),由點到面!希望技術(shù)大牛能過來指導(dǎo)學(xué)習(xí)。

創(chuàng)新互聯(lián)致力于成都網(wǎng)站制作、做網(wǎng)站,成都網(wǎng)站設(shè)計,集團網(wǎng)站建設(shè)等服務(wù)標(biāo)準(zhǔn)化,推過標(biāo)準(zhǔn)化降低中小企業(yè)的建站的成本,并持續(xù)提升建站的定制化服務(wù)水平進(jìn)行質(zhì)量交付,讓企業(yè)網(wǎng)站從市場競爭中脫穎而出。 選擇創(chuàng)新互聯(lián),就選擇了安全、穩(wěn)定、美觀的網(wǎng)站建設(shè)服務(wù)!

上一節(jié)了解Java基礎(chǔ)語法,本節(jié)我們開始學(xué)習(xí)Java基礎(chǔ)-運算符,將會圍繞以下幾個知識點進(jìn)行展開學(xué)習(xí):

  1. 算術(shù)運算符

  2. 賦值運算符

  3. 比較運算符

  4. 邏輯運算符

  5. 位運算符

  6. 三元運算符

PS:開始之前我們先針對上節(jié)數(shù)據(jù)類型中補充的幾個小問題

一、數(shù)據(jù)類型中補充的幾個小問題

1、byte值的問題

byte b1=127;

byte b2=(byte)128; //-128

byte b3=(byte)129//-127

byte b3=(byte)130; //-126

byte的范圍:-128 ~ 127

128: 10000000

-128:10000000(這里的1即是符號位,也是數(shù)值位)

2、數(shù)據(jù)類型轉(zhuǎn)化之默認(rèn)轉(zhuǎn)換(遵循從小到大轉(zhuǎn)換)

byte,short,char ---int ---long---float---double

long:8個字節(jié)

float:4個字節(jié)

雖然是默認(rèn)轉(zhuǎn)換,但因為以下原因,long默認(rèn)轉(zhuǎn)換為float

a、它們底層的存儲結(jié)構(gòu)是不同的。

b、float表示的數(shù)據(jù)范圍比long的范圍大

  • long:     2^63-1

  • float:      3.4*10^38 > 2*10^38 >2*8^38 = 2*2^3^38 = 2*2^114 > 2^63-1

3、Java語言中的字符char可以存儲一個中文漢字嗎,為什么呢?

  • 可以,因為Java語言中的字符占用兩個字節(jié)。

  • Java語言采用的是Unicode編碼,所有的字符都是依照Unicode進(jìn)行編碼的


二、運算符


從0開始學(xué)大數(shù)據(jù)-Java運算符(3)

運算符總覽表

在我們數(shù)學(xué)中也會經(jīng)常用到運算(加減乘除等),那在Java程序中也是經(jīng)常要做一些運算操作都有哪些呢,那么先看一下以下針對運算和運算符的定義:

運算:是對常量和變量進(jìn)行操作的過程成為運算

運算符:是對常量和變量進(jìn)行操作的符號稱為運算符

分類(6種):算術(shù)運算符,賦值運算符,比較運算符,邏輯運算符,位運算符,三目運算符


從0開始學(xué)大數(shù)據(jù)-Java運算符(3)

那么,我們現(xiàn)在對各類運算符逐一的進(jìn)行了解

1、算術(shù)運算符

符號:


+,-,*,/,%,++,--

注意事項:

a、整數(shù)相除只能得到整數(shù),如果想得到小數(shù),必須把數(shù)據(jù)變換為浮點數(shù)類型

b、/ 獲取的是除法操作的商,% 獲取的是除法操作的余數(shù)

下面我們先編寫程序代碼執(zhí)行看下效果

從0開始學(xué)大數(shù)據(jù)-Java運算符(3)

程序執(zhí)行結(jié)果:

從0開始學(xué)大數(shù)據(jù)-Java運算符(3)

(1)++,--運算符的使用

A:單獨使用:


  • 放在操作數(shù)的前面和后面效果一樣,(這種情況是比較常見的)

B:參與運算使用:

  • 放在操作數(shù)的前面,先自增1或者自減1,然后再參與運算。

  • 放在操作數(shù)的后面,先參與運算,再自增1或者自減1。

C:作用:就是對變量進(jìn)行自增或者自減。

程序舉例:

從0開始學(xué)大數(shù)據(jù)-Java運算符(3)

放后面,程序打印出來的結(jié)果:

從0開始學(xué)大數(shù)據(jù)-Java運算符(3)

放前面,程序打印出來的結(jié)果

從0開始學(xué)大數(shù)據(jù)-Java運算符(3)

可見,我們前面總結(jié)的是對的。


  • 放在操作數(shù)的前面,先自增1或者自減1,然后再參與運算。

  • 放在操作數(shù)的后面,先參與運算,再自增1或者自減1。


接下來,我們進(jìn)一步看一下+的用法(主要有三種):

    A:加法

    B:正號

    C:字符串的連接符

程序舉例:

從0開始學(xué)大數(shù)據(jù)-Java運算符(3)

程序執(zhí)行結(jié)果:

從0開始學(xué)大數(shù)據(jù)-Java運算符(3)

可見:

* 運算規(guī)則是從左到右做運算的,"hello"+'a'+1 ,系統(tǒng)會先識別到hello是一個字符串,則后面的加號就是作為字符串連接符使用,與字符a連接后,形成一個新的字符串,再拼接1。

* 同樣的,在'a'+1+"hello"則是先運算'a'+1(這里的加號是作加法使用),再連接字符串hello.

2、賦值運算符

符號:


=,+=,-=,*=,/=,%=等

可以劃分為以下兩種:

基本的賦值運算符:=

  • 把右邊的數(shù)據(jù)賦值給左邊。

擴展的賦值運算符:+=,-=,*=,/=,%=

  • +=把左邊和右邊做加法,然后賦值給左邊

  • 同理,-=,*=,/=,%=的用法參照上述說明


程序舉例:

從0開始學(xué)大數(shù)據(jù)-Java運算符(3)

程序執(zhí)行結(jié)果:

從0開始學(xué)大數(shù)據(jù)-Java運算符(3)

思考題:

接下來,來思考兩個問題,

  • short s=1,s=s+1;

  • short s=1,s+=1;

判斷上面兩個代碼有沒有問題,如果有,哪里有問題?

編寫程序代碼驗證下:

第一種:

從0開始學(xué)大數(shù)據(jù)-Java運算符(3)

程序執(zhí)行結(jié)果:

從0開始學(xué)大數(shù)據(jù)-Java運算符(3)

注意:還記得,前面我們學(xué)的 short類型做運算的時候,默認(rèn)是先轉(zhuǎn)換成int類型,int類型占用4個字節(jié)數(shù),short類型占用2個字節(jié)數(shù),遵從從小到大的轉(zhuǎn)換原則,所以本程序中s=s+1做運算會損失進(jìn)度。

第二種:

從0開始學(xué)大數(shù)據(jù)-Java運算符(3)

程序執(zhí)行結(jié)果:

從0開始學(xué)大數(shù)據(jù)-Java運算符(3)

可見,擴展的賦值運算符其實隱含了一個強制類型轉(zhuǎn)換。

  • s +=1;并不等價于s = s + 1;而是等價于s = (s的數(shù)據(jù)類型)(s+1);

  • 所以通過s +=1;的執(zhí)行結(jié)果是沒有報錯。


3、比較運算符

符號:


  • ==  表示等于

  • !=  表示不等于

  • > 表示大于號

  • >= 表示大于等于

  • < 表示小于

  • <= 表示小于等于

特點:

  • 無論你的操作是簡單還是復(fù)雜的,結(jié)果都是Boolean類型的 (false和true)

注意事項:

  • "=="不能寫成"=";否則會變成賦值運算。


程序舉例:

從0開始學(xué)大數(shù)據(jù)-Java運算符(3)

程序執(zhí)行結(jié)果:

從0開始學(xué)大數(shù)據(jù)-Java運算符(3)

可見,比較運算符對應(yīng)的結(jié)果是Boolean類型的

4、邏輯運算符

符號:

  • &,|,^,!

基本用法:

  • & 與運算,(注意,但&兩邊為布爾值為邏輯與運算,當(dāng)&兩邊為數(shù)字為位運算符)

  • | 或運算

  • ^ 異或運算

  • ! 非運算

特殊用法:

  • &&    雙與運算

  • ||        雙或運算

特點:

  • 邏輯運算符一般用于連接boolean類型的表達(dá)式或者值。

表達(dá)式:

  • 就是用運算符把常量或者變量連接起來的符合java語法的式子

算術(shù)表達(dá)式:a + b

比較表達(dá)式:a == b

結(jié)論:

(1)& 邏輯與:有false則false

(2)| 邏輯或:有true則true

(3)  ^ 邏輯異或:相同為false,不同為true

    ^異或舉例:

    • 情侶關(guān)系: 男男,男女,女男,女女,

    • 可見:正常的情侶關(guān)系中,異性是之間才是true的

    • 特別聲明:這里絕對沒有歧視同性之間的關(guān)系,純屬為了學(xué)習(xí)交流的^-^

(4)  !邏輯非:非false則true,非true則false

    • 特點:偶數(shù)個!不改變本身的運算結(jié)果


編寫以下程序?qū)ι鲜鰩追N邏輯運算進(jìn)行驗證:

程序舉例:

從0開始學(xué)大數(shù)據(jù)-Java運算符(3)

程序執(zhí)行結(jié)果:


從0開始學(xué)大數(shù)據(jù)-Java運算符(3)

可見,我們的結(jié)論是正確的,邏輯運算符的基本用法也都講完了,下面我們看看特殊用法。

程序舉例(雙與&& 用法):

從0開始學(xué)大數(shù)據(jù)-Java運算符(3)

程序執(zhí)行結(jié)果:

從0開始學(xué)大數(shù)據(jù)-Java運算符(3)

可見,&&與&的區(qū)別?||與|的區(qū)別?

  • 兩種運算符的運算結(jié)果是一樣的

  • &&具有短路效果,如果左邊是false,則右邊不執(zhí)行

||與|就不再多做代碼演示,可以自行嘗試驗證:

  • 兩種運算符的運算結(jié)果是一樣的

  • ||具有短路效果,如果左邊是true,則右邊就不執(zhí)行,結(jié)果就為true

注意:開發(fā)中常用的邏輯運算符:

  • &&

  • ||

  • !

5、位運算符

符號:

  • & 與位運算

  • | 或位運算

  • ^ 異或運算

  • ~ 翻轉(zhuǎn)運算

  • << 左移運算

  • >> 右移運算

  • >>>無符號右移運算

注意:

  • 要做位運算,首先要把數(shù)據(jù)轉(zhuǎn)換為二進(jìn)制

案例:

通過下述案例,了解下位運算符的特點:

從0開始學(xué)大數(shù)據(jù)-Java運算符(3)

我們先分析下幾條位運算符打印出來的結(jié)果:

分析: 因為是位運算,所以我們必須要把數(shù)據(jù)換算成二進(jìn)制

?

3的二進(jìn)制: 11

00000000 00000000 00000000 00000011

4的二進(jìn)制:100

00000000 00000000 00000000 00000100

&位與運算:有0則0

00000000 00000000 00000000 00000011

     &  00000000 00000000 00000000 00000100?

                ---------------------------------------------

00000000 00000000 00000000 00000000

結(jié)果是:0

?

?

|位或運算:有1則1

00000000 00000000 00000000 00000011

 |   00000000 00000000 00000000 00000100

-------------------------------------------------

00000000 00000000 00000000 00000111

結(jié)果是:7?

?

?

^位異或運算:相同則0,不同則1

00000000 00000000 00000000 00000011

^  00000000 00000000 00000000 00000100

---------------------------------------------

00000000 00000000 00000000 00000111

結(jié)果是:7?

?

?

~按位取反運算:0變1,1變0

    00000000 00000000 00000000 00000011

    ----------------------------------------------

~  11111111 11111111 11111111 11111100 (補碼)?

?

  • 因為該值得出來是原數(shù)值的補碼,所以我們要進(jìn)一步的求出它的原碼才是我們最終要的值。如果不知道怎么運算,可以參照上一節(jié)的Java基礎(chǔ)語法


?

補碼:11111111 11111111 11111100

反碼:11111111 11111111 11111011

原碼:10000000  0000000  00000100

結(jié)果是:-4?

?

通過分析執(zhí)行程序代碼,可見我們的分析是正確的:

從0開始學(xué)大數(shù)據(jù)-Java運算符(3)

*另外,針對^還有以下特點:

  • 一個數(shù)據(jù)對另一個數(shù)據(jù)位異或兩次,該數(shù)據(jù)本身不變。


程序舉例:

從0開始學(xué)大數(shù)據(jù)-Java運算符(3)

執(zhí)行結(jié)果如下:

從0開始學(xué)大數(shù)據(jù)-Java運算符(3)

可見,^異或運算可以用于兩個數(shù)值對調(diào)的運算,建議自行編寫如下代碼做驗證:

  • a = a ^ b;

  • b = a ^ b;

  • a = a ^ b;

這個留給大家自己動手操作。

接下來,我們進(jìn)一步看一下以下幾種運算:

  • <<:左移,左邊最高位丟棄,右邊補齊0

  • >>:右移,正數(shù)最高位是0,左邊補齊0;負(fù)數(shù)最高位是1,左邊補齊1

  • >>>:無符號右移,無論最高位是0還是1,左邊補齊0

舉例:

從0開始學(xué)大數(shù)據(jù)-Java運算符(3)

在執(zhí)行運算之前,我們先做以下分析:

<<的移動:

?

首先,我們需要先計算出3的二進(jìn)制:11

00000000 00000000 00000000 00000011

(00)00000000 00000000 00000000 00001100

--------------------------------------------------------

左移2位,結(jié)果為:12?

?

  • 可見,<<是把<<左邊的數(shù)據(jù)*2的移動次冪,即3*2^2=12

  • 同理,>>是把>>左邊的數(shù)據(jù)除以2的移動次冪,即24/2^2 = 24/4 = 6

>>的移動:

?

計算出24的二進(jìn)制:11000

原碼:10000000  00000000  00000000  00011000

反碼:11111111  11111111   11111111  11100111

補碼:11111111  11111111   11111111  11101000

1111111111  11111111  11111111  111010(00)

        右移2位,最高位補1,生成新的補碼?

?

然后再通過以下方式求出原碼,就是我們需要的結(jié)果。

?

補碼:1111111111 11111111  11111111 111010

反碼:1111111111 11111111  11111111 111001

原碼:1000000000 00000000  00000000 000110

-----------------------------------------------------

結(jié)果是:-6?

?

>>>的移動:

?

計算出24的二進(jìn)制:11000

原碼:10000000  00000000 00000000 00011000

反碼:11111111  11111111 11111111 11100111

補碼:11111111  11111111 11111111 11101000

0011111111 11111111 11111111 111010(00)

右移2位,最高位補0,生成新的補碼?

新的補碼:0011111111  11111111 11111111 111010

?

  • 因為新生成的補碼最高位為0,所以為正數(shù),即它的原碼、反碼和補碼的值都相同。


  • 所以11111111 11111111 11111111 111010對應(yīng)的十進(jìn)制結(jié)果是:1073741818

程序的執(zhí)行結(jié)果為:

從0開始學(xué)大數(shù)據(jù)-Java運算符(3)

可見,我們最終可以總結(jié)如下幾點:

  • <<是把<<左邊的數(shù)據(jù)*2的移動次冪

  • >>是把>>左邊的數(shù)據(jù)除以2的移動次冪

  • >>:有符號右移。正數(shù)右移高位補0,負(fù)數(shù)右移高位補1

  • >>>:無符號右移。無論是正數(shù)還是負(fù)數(shù),高位通通補0。

  • 對于正數(shù)而言,>>和>>>沒區(qū)別。


最后,還有一個三元運算符沒講,我們將放到下一節(jié)做專題說明。

往期文章:

從0開始學(xué)大數(shù)據(jù)-Java基礎(chǔ)開篇(1)

從0開始學(xué)大數(shù)據(jù)-Java基礎(chǔ)語法(2)

本人能力有限,如有不足,還望指正

感謝大家一如既往的支持

希望一起分享給更多的人

讓大家一起學(xué)習(xí)大數(shù)據(jù)技術(shù)

從0開始學(xué)大數(shù)據(jù)-Java運算符(3)

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。


當(dāng)前文章:從0開始學(xué)大數(shù)據(jù)-Java運算符(3)-創(chuàng)新互聯(lián)
分享URL:http://weahome.cn/article/dpdesi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部