91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

從0開始學大數據-Java運算符(3)

發布時間:2020-06-05 19:26:32 來源:網絡 閱讀:779 作者:升sheng 欄目:大數據

我們從零開始學習大數據技術,從java基礎,到Linux技術涉獵,再深入到大數據技術的Hadoop、Spark、Storm技術,最后到大數據企業平臺的搭建,層層遞進,由點到面!希望技術大牛能過來指導學習。


上一節了解Java基礎語法,本節我們開始學習Java基礎-運算符,將會圍繞以下幾個知識點進行展開學習:

  1. 算術運算符

  2. 賦值運算符

  3. 比較運算符

  4. 邏輯運算符

  5. 位運算符

  6. 三元運算符

PS:開始之前我們先針對上節數據類型中補充的幾個小問題

 

一、數據類型中補充的幾個小問題

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即是符號位,也是數值位)


2、數據類型轉化之默認轉換(遵循從小到大轉換)

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

long:8個字節

float:4個字節

雖然是默認轉換,但因為以下原因,long默認轉換為float

a、它們底層的存儲結構是不同的。

b、float表示的數據范圍比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語言中的字符占用兩個字節。

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


二、運算符

從0開始學大數據-Java運算符(3)

運算符總覽表


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

運算:是對常量和變量進行操作的過程成為運算

運算符:是對常量和變量進行操作的符號稱為運算符

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

從0開始學大數據-Java運算符(3)

那么,我們現在對各類運算符逐一的進行了解


1、算術運算符


符號:

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

注意事項:

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

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

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

從0開始學大數據-Java運算符(3)



程序執行結果:



從0開始學大數據-Java運算符(3)


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


A:單獨使用:

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

B:參與運算使用:

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

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

C:作用:就是對變量進行自增或者自減。


程序舉例:

從0開始學大數據-Java運算符(3)



放后面,程序打印出來的結果:

從0開始學大數據-Java運算符(3)



放前面,程序打印出來的結果

從0開始學大數據-Java運算符(3)



可見,我們前面總結的是對的。

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

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


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

    A:加法

    B:正號

    C:字符串的連接符

程序舉例:

從0開始學大數據-Java運算符(3)



程序執行結果:

從0開始學大數據-Java運算符(3)



可見:

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

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



2、賦值運算符


符號:

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


可以劃分為以下兩種:

基本的賦值運算符:=

  • 把右邊的數據賦值給左邊。

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

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

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


程序舉例:

從0開始學大數據-Java運算符(3)



程序執行結果:



從0開始學大數據-Java運算符(3)

思考題:

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

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

  • short s=1,s+=1;

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


編寫程序代碼驗證下:

第一種:

從0開始學大數據-Java運算符(3)

程序執行結果:

從0開始學大數據-Java運算符(3)



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


第二種:

從0開始學大數據-Java運算符(3)



程序執行結果:

從0開始學大數據-Java運算符(3)

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

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

  • 所以通過s +=1;的執行結果是沒有報錯。



3、比較運算符


符號:

  • ==  表示等于

  • !=   表示不等于

  • > 表示大于號

  • >= 表示大于等于

  • < 表示小于

  • <= 表示小于等于

特點:

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

注意事項:

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


程序舉例:

從0開始學大數據-Java運算符(3)



程序執行結果:

從0開始學大數據-Java運算符(3)



可見,比較運算符對應的結果是Boolean類型的



4、邏輯運算符


符號:

  • &,|,^,!

基本用法:

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

  • | 或運算

  • ^ 異或運算

  • ! 非運算

特殊用法:

  • &&    雙與運算

  • ||        雙或運算

特點:

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

表達式:

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

算術表達式:a + b

比較表達式:a == b

結論:

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

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

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

    ^異或舉例:

    • 情侶關系: 男男,男女,女男,女女,

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

    • 特別聲明:這里絕對沒有歧視同性之間的關系,純屬為了學習交流的^-^

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

    • 特點:偶數個!不改變本身的運算結果


編寫以下程序對上述幾種邏輯運算進行驗證:


程序舉例:

從0開始學大數據-Java運算符(3)

程序執行結果:

從0開始學大數據-Java運算符(3)



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


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

從0開始學大數據-Java運算符(3)



程序執行結果:

從0開始學大數據-Java運算符(3)

可見,&&與&的區別?||與|的區別?

  • 兩種運算符的運算結果是一樣的

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


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

  • 兩種運算符的運算結果是一樣的

  • ||具有短路效果,如果左邊是true,則右邊就不執行,結果就為true


注意:開發中常用的邏輯運算符:

  • &&

  • ||

  • !


5、位運算符

符號:

  • & 與位運算

  • | 或位運算

  • ^ 異或運算

  • ~ 翻轉運算

  • << 左移運算

  • >> 右移運算

  • >>>無符號右移運算


注意:

  • 要做位運算,首先要把數據轉換為二進制


案例:

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

從0開始學大數據-Java運算符(3)



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

分析: 因為是位運算,所以我們必須要把數據換算成二進制


?

3的二進制: 11

00000000 00000000 00000000 00000011

4的二進制:100

00000000 00000000 00000000 00000100

&位與運算:有0則0

00000000 00000000 00000000 00000011

        &   00000000 00000000 00000000 00000100?

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

00000000 00000000 00000000 00000000

結果是:0

?



?

|位或運算:有1則1

00000000 00000000 00000000 00000011

  |   00000000 00000000 00000000 00000100

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

00000000 00000000 00000000 00000111

結果是:7?

?



?

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

00000000 00000000 00000000 00000011

^   00000000 00000000 00000000 00000100

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

00000000 00000000 00000000 00000111

結果是:7?

?



?

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

     00000000 00000000 00000000 00000011

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

~  11111111 11111111 11111111 11111100 (補碼)?

?


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


?

補碼:11111111 11111111 11111100

反碼:11111111 11111111 11111011

原碼:10000000  0000000  00000100

結果是:-4?

?


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

從0開始學大數據-Java運算符(3)



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

  • 一個數據對另一個數據位異或兩次,該數據本身不變。


程序舉例:

從0開始學大數據-Java運算符(3)



執行結果如下:

從0開始學大數據-Java運算符(3)



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

  • a = a ^ b;

  • b = a ^ b;

  • a = a ^ b;

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


接下來,我們進一步看一下以下幾種運算:

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

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

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


舉例:

從0開始學大數據-Java運算符(3)



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

<<的移動:


?

首先,我們需要先計算出3的二進制:11

00000000 00000000 00000000 00000011

(00)00000000 00000000 00000000 00001100

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

左移2位,結果為:12?

?


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

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

>>的移動:


?

計算出24的二進制:11000

原碼:10000000   00000000   00000000  00011000

反碼:11111111  11111111    11111111  11100111

補碼:11111111  11111111    11111111  11101000

1111111111  11111111   11111111   111010(00)

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

?


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


?

補碼:1111111111 11111111  11111111 111010

反碼:1111111111 11111111  11111111 111001

原碼:1000000000 00000000  00000000 000110

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

結果是:-6?

?


>>>的移動:


?

計算出24的二進制: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,所以為正數,即它的原碼、反碼和補碼的值都相同。

  • 所以11111111 11111111 11111111 111010對應的十進制結果是:1073741818

程序的執行結果為:

從0開始學大數據-Java運算符(3)



可見,我們最終可以總結如下幾點:

  • <<是把<<左邊的數據*2的移動次冪

  • >>是把>>左邊的數據除以2的移動次冪

  • >>:有符號右移。正數右移高位補0,負數右移高位補1

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

  • 對于正數而言,>>和>>>沒區別。


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

往期文章:

從0開始學大數據-Java基礎開篇(1)

從0開始學大數據-Java基礎語法(2)

 

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

感謝大家一如既往的支持

希望一起分享給更多的人

讓大家一起學習大數據技術

從0開始學大數據-Java運算符(3)


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

京山县| 岳阳市| 凤城市| 贵德县| 公安县| 榆林市| 故城县| 溆浦县| 大城县| 麦盖提县| 贵德县| 临邑县| 东丰县| 拜城县| 鹿邑县| 东乡族自治县| 金乡县| 界首市| 房产| 多伦县| 钦州市| 陇南市| 镇江市| 云安县| 丁青县| 天水市| 通榆县| 洪泽县| 隆安县| 项城市| 南木林县| 元氏县| 北安市| 高州市| 红安县| 遂川县| 光山县| 莆田市| 垫江县| 定日县| 林芝县|