那些你不能忽略的基礎(chǔ)知識(1)

基本數(shù)據(jù)類型轉(zhuǎn)換

在Java中萍启,我們經(jīng)常使用到基本數(shù)據(jù)的類型轉(zhuǎn)換,類型轉(zhuǎn)換用來將一個數(shù)值從一種類型轉(zhuǎn)換位另一種類型余寥。
  我們都直到對于基本數(shù)據(jù)類型怎爵,在內(nèi)存中都會占有不同的大小,如下

數(shù)據(jù)類型 位數(shù)(字節(jié))
char 16位(2字節(jié))
byte 8位(1字節(jié))
short 16位(2字節(jié))
int 32位(4字節(jié))
long 64位(8字節(jié))
float 32位(4字節(jié))
double 64位(8字節(jié))
boolean 8位(1字節(jié))

在基本數(shù)據(jù)的類型轉(zhuǎn)換中分為兩種帅涂,一種是強制(顯式)類型轉(zhuǎn)換议薪,一種是自動(隱式)類型轉(zhuǎn)換。
  首先要聲明一下媳友,在Java中所有寫的數(shù)字字面量斯议,對于整數(shù)都是int類型的,比如:1000醇锚,這就是一個int類型的數(shù)字字面量哼御;對于小數(shù)都是double類型的,比如:2.22,這就是一個double類型的數(shù)字字面量焊唬。
  強制類型轉(zhuǎn)換指的是數(shù)值范圍較大的數(shù)據(jù)類型變量轉(zhuǎn)換為數(shù)值范圍較小的數(shù)據(jù)類型變量恋昼,這樣有可能會造成精度的損失。這種轉(zhuǎn)換赶促,在編程時需要我們顯示的聲明液肌,例如:

int i = 22;
//對于變量,由于我們有時不能確定變量的具體值鸥滨,所以需要一直進行顯示的聲明類型轉(zhuǎn)換
byte a = (byte)i;
//對于數(shù)字字面量嗦哆,如果其值沒有超出目標數(shù)據(jù)類型的數(shù)值范圍谤祖,則不需要顯示的聲明類型轉(zhuǎn)換
//如果其值超出了目標數(shù)據(jù)類型的數(shù)值范圍,則需要顯示的聲明類型轉(zhuǎn)換老速,這是就會產(chǎn)生精度的損失
byte b = 22;
byte c = (byte)220;

自動類型轉(zhuǎn)換值得是數(shù)值范圍較小的數(shù)據(jù)類型自動轉(zhuǎn)換位數(shù)值范圍較大的數(shù)據(jù)類型粥喜,比如:

byte b = 1;
int i = b;//此時就不需要顯示的聲明類型轉(zhuǎn)換

但是對于從范圍較小的整型類型轉(zhuǎn)換位范圍較大的整型類型時有個規(guī)定:如果最初的值的數(shù)值類型是有符號的,那么就執(zhí)行符號擴展橘券;如果最初的值是char類型的额湘,那么不管它將要轉(zhuǎn)換成什么類型的數(shù)據(jù),都執(zhí)行零擴展旁舰。那么什么叫符號擴展锋华,什么叫零擴展呢?
  符號擴展:二進制中的有符號數(shù)箭窜,符號位總是位于數(shù)的第一位供置,如果向方位較大的數(shù)據(jù)類型進行擴展,符號位也應(yīng)該位于第一位才對绽快,所以當一個負數(shù)被擴展時,其擴展的高位全被置位為1紧阔;對于整數(shù)坊罢,因為符號位是0,所以其擴展的位仍然是0擅耽。
  零擴展:不管要轉(zhuǎn)換成什么整型類型活孩,不要最初值的符號位是什么,擴展的高位都被置位0.
  下面看這樣一個輸出:

public static void main(String[] args){
    System.out.println((int)(char)(byte)-1);
}

也許你會認為不管怎么樣乖仇,該程序都會輸出-1.當當運行后憾儒,該程序 卻輸出了65535,這是為什么乃沙?實際上這就關(guān)系到了我們上面提到的符號擴展起趾。
  對于字面量-1,它是一個int類型的數(shù)據(jù)警儒,由于計算機中對于負數(shù)采用二進制補碼來表示训裆,二進制表示為1111 1111 1111 1111 1111 1111 1111 1111int類型轉(zhuǎn)換為byte類型蜀铲,對數(shù)據(jù)進行窄化边琉,其高24位全部被丟棄,轉(zhuǎn)換后的數(shù)據(jù)仍然是-1记劝,二進制表示為1111 1111变姨,這沒有錯。
  當byte類型轉(zhuǎn)換位char類型時厌丑,是對數(shù)據(jù)進行拓寬數(shù)位定欧,但不可能將一個負byte值轉(zhuǎn)換為char類型渔呵。所以實際上從bytechar的類型轉(zhuǎn)換時是先將byte轉(zhuǎn)換為int類型,然后再將int類型轉(zhuǎn)換為char類型忧额。簡單地根據(jù)上面介紹的規(guī)則厘肮,byte轉(zhuǎn)換為char發(fā)生符號擴展,拓展的高位全部置為1睦番,char類型沒有有符號與無符號之分类茂,所以轉(zhuǎn)換后的char表示的數(shù)據(jù)是65535
  但是當char類型轉(zhuǎn)換位int類型托嚣,從16位拓寬到32位巩检,由于最初數(shù)值是char類型的,所以不管轉(zhuǎn)換成什么類型的數(shù)據(jù)類型示启,都會執(zhí)行零擴展兢哭,所以轉(zhuǎn)換為作為結(jié)果的int類型數(shù)據(jù)是65535
  如果你的程序中運用到了上面的規(guī)則夫嗓,那么你應(yīng)該很清楚地標識出來迟螺。

二進制補碼:計算機中用二進制補碼表示負數(shù),對二進制數(shù)取反舍咖,然后加1矩父。比如說-3,表示位16位二進制,首先將3表示為二進制0000 0000 0000 0011排霉,然后對其取反得到1111 1111 1111 1100窍株,然后在加1,得到1111 1111 1111 1101表示的-3的二進制補碼形式.
如果有錯誤的地方攻柠,請指正球订。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市瑰钮,隨后出現(xiàn)的幾起案子冒滩,更是在濱河造成了極大的恐慌,老刑警劉巖飞涂,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件旦部,死亡現(xiàn)場離奇詭異,居然都是意外死亡较店,警方通過查閱死者的電腦和手機士八,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來梁呈,“玉大人婚度,你說我怎么就攤上這事。” “怎么了蝗茁?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵醋虏,是天一觀的道長。 經(jīng)常有香客問我哮翘,道長颈嚼,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任饭寺,我火速辦了婚禮阻课,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘艰匙。我一直安慰自己限煞,他們只是感情好,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布员凝。 她就那樣靜靜地躺著署驻,像睡著了一般。 火紅的嫁衣襯著肌膚如雪健霹。 梳的紋絲不亂的頭發(fā)上旺上,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天,我揣著相機與錄音糖埋,去河邊找鬼抚官。 笑死,一個胖子當著我的面吹牛阶捆,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播钦听,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼洒试,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了朴上?” 一聲冷哼從身側(cè)響起垒棋,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎痪宰,沒想到半個月后叼架,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡衣撬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年乖订,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片具练。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡乍构,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出扛点,到底是詐尸還是另有隱情哥遮,我是刑警寧澤岂丘,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站眠饮,受9級特大地震影響奥帘,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜仪召,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一寨蹋、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧返咱,春花似錦钥庇、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至萤晴,卻和暖如春吐句,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背店读。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工嗦枢, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人屯断。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓文虏,卻偏偏與公主長得像,于是被迫代替她去往敵國和親殖演。 傳聞我的和親對象是個殘疾皇子氧秘,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 網(wǎng)站亂碼問題我們會經(jīng)常碰到,大多見于非英文的中文字符或其他字符亂碼趴久,而且丸相,這類問題常常是因為編碼方式問題,主要原因...
    波段頂?shù)?/span>閱讀 2,822評論 1 9
  • 1 關(guān)鍵字 1.1 關(guān)鍵字的概述 Java的關(guān)鍵字對java的編譯器有特殊的意義彼棍,他們用來表示一種數(shù)據(jù)類型灭忠,或...
    哈哈哎呦喂閱讀 646評論 0 0
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young閱讀 3,776評論 1 10
  • 好久沒有想一想遠方的大海 它曾經(jīng)在夢里無數(shù)次喊我的名字 好久沒有想一想天空的遠星 它曾經(jīng)在暗夜無數(shù)次對我眨著眼睛 ...
    楠木西閱讀 564評論 0 0
  • 月齡:7M ?寶寶補鐵杠杠好的—豬肝粉 豬肝粉的好處:補鐵佳品,預(yù)防貧血座硕,含有豐富的維生素A和蛋白質(zhì)弛作,有助于骨骼發(fā)...
    Jannie_momo閱讀 275評論 0 1