Java 數(shù)據(jù)類型 類型轉換 運算符

常用的進制
二進制
八進制
十進制
十六進制
進制之間是可以互相轉換的。

進制如何轉換 以二進制和十進制進制為例
10 -> 2
不停的除以2直 至結果是1 然后從1開始 從下至上 拼接余數(shù)
2 -> 10
1010 -> 10 02^0 + 12^1 + 02^2 + 12^3 = 10
1110 -> 14 02^0 + 12^1 + 12^2 + 12^3 = 14
100000000 -> 256 1*2^8 = 256
從右至左 用該位的值 * 2^x次方 x初始值是0 每次遞增1

先來了解一下計算機的存儲單位和原碼 反碼 補碼的概念。
計算機最小的存儲單位:比特bit 苍息。8bit == 1 字節(jié)

java里的數(shù)據(jù)存儲和計算 都是使用補碼來操作的
二進制有正負之分菠净,但是計算機并不識別正負號,為了讓計算機識別正負號透罢,引入了符號位0,1刨啸,
0代表正获茬,1代表負履恩。且把符號位置于該數(shù)的最高數(shù)值位之前锰茉,這樣表示的數(shù)稱為機器數(shù)(或稱機器碼),
即把符號位和數(shù)值位一起編碼來表示的數(shù)就是機器數(shù)

1.原碼
符號位為0表示正數(shù)切心,為1表示負數(shù)數(shù)值部分用二進制數(shù)的絕對值表示的方法稱為原碼表示法飒筑,通常用[X]原表示X的原碼。
例子:
+59的原碼為:00111011
-59的原碼為: 10111011

2.反碼
一個數(shù)如果為正绽昏,則它的反碼與原碼相同协屡;一個數(shù)如果為負,則符號位為1而涉,其余各位是對原碼取反著瓶。
例子:
+59的反碼為:00111011
-59的反碼為: 11000100

3.補碼
一個數(shù)如果為正联予,則它的原碼啼县、反碼、補碼相同沸久;一個數(shù)如果為負季眷,則符號位為1,其余各位是對原碼取反卷胯,然后整個數(shù)加1子刮。
例子:
+59的反碼為:00111011
-59的反碼為: 11000101

Java的數(shù)據(jù)類型
java是一門強類型的語言 任何變量聲明必須指定類型。成員變量具有初始值 初始值是什么取決于數(shù)據(jù)類型窑睁。

java中數(shù)據(jù)類型都有哪些呢挺峡?
1. 基本數(shù)據(jù)類型 -- 4類8種
2. 引用數(shù)據(jù)類型 -- 主要包括 類 數(shù)組 接口


八種基本數(shù)據(jù)類型


1.數(shù)值類型--整數(shù)類型
1.1 字節(jié)型:用 byte 來表示,用8位2進制存儲 占1個字節(jié) 取值范圍[-128,127]担钮。

1.2 短整型:用 short 表示橱赠,用16位2進制表示 占2個字節(jié) 取值范圍 [-32768,32767]。

1.3 整型:用 int 表示箫津,用32位2進制表示 占4個字節(jié) 取值范圍[-231,231-1] 取值范圍[-2147483648,2147483647]狭姨。

1.4 長整型:用 long 表示,用64位2進制表示 占8個字節(jié) 取值范圍 [-263,263-1]苏遥。
注意 整型數(shù)據(jù)默認是 int 類型 可以把不超出byte范圍的數(shù)據(jù) 賦值給 long饼拍。
在整型數(shù)據(jù)之后加一個 l或L 可以標識為 long類型的數(shù)據(jù) 可以增加取值范圍,由于小寫的l 和 整數(shù)1 太相似 故推薦使用 大寫L田炭。

2.數(shù)值類型--浮點型
2.1 單精度:用 float 表示师抄, 32位2進制表示 占4個字節(jié) 取值范圍 比long大的多 E38
它保證了7位有效數(shù)字 不保證第八位是否有效 也不保證一定無效。

2.2 雙精度:用 double 表示教硫, 64位2進制表示 占8個字節(jié) 取值范圍比 float司澎,它保證了15位有效數(shù)字 參與運算時使用 14位 故它成為雙精度欺缘。
注意:所有的浮點型默認是double類型的 且不能把不超出范圍的浮點型數(shù)據(jù) 給 float存儲
如何讓浮點型數(shù)據(jù)表示為 float類型呢 ?
加小寫f 或大寫 F
浮點型數(shù)據(jù) 使用科學計數(shù)法來存儲 所以他們的取值范圍遠遠大于整型挤安。

3.數(shù)值類型--字符型
字符型:用 char 表示谚殊,16位二進制 占2個字節(jié) 取值范圍[0,65535]
一對單引號括起來的 單個字符 就是一個字符型數(shù)據(jù),字符型數(shù)據(jù)可以參與運算蛤铜,因為字符型數(shù)據(jù)參與運算時 使用的自己的位置號 也可以說是編碼值嫩絮。
例如:"ABCDEFG" 'A' 65 'B'66 'C'67
注意: 字符型數(shù)據(jù)對應的整數(shù) 沒有負數(shù)

4.布爾類型
布爾型:用 boolean 表示,它只有兩個值 true和 false 代表真和假
它支持邏輯運算 因此又稱為邏輯類型 它是電腦可以進行邏輯運算的 重要支持围肥。它占4個字節(jié) 如果在數(shù)組中 它占1個字節(jié)

Java里基本數(shù)據(jù)類型轉換(不涉及到 布爾型)
分為兩種情況:
1.自動轉換
2.強制轉換
大類型轉到小類型數(shù)據(jù)剿干,不能自動的轉換需要進行強制轉換,否則會報錯

如何進行強制轉換呢 穆刻?
格式:
小類型 小類型變量 = (小類型)大類型變量 || 小類型變量 = (小類型)大類型變量
引用數(shù)據(jù)類型強轉置尔,也是這個格式。

類型強制轉換會引發(fā)問題嗎氢伟?
小類型 真實空間不夠使用 那么在大類型數(shù)據(jù)里進行截取 截取之后數(shù)據(jù)可能會發(fā)生改變榜轿,如果真的超出了取值范圍 那么盡量不要強轉。

Java的運算符


算數(shù)運算符
內容 : + - * / % ++ --
特性 : 兩個數(shù)值進行算術運算符操作 其表達式就是算數(shù)表達式
算數(shù)表達式會有結果值 也可以表達式執(zhí)行完會有返回值朵锣,結果是兩個操作數(shù)中 大類型的類型谬盐。如果操作數(shù)的雙方均為 byte short char 中的類型 那么結果自動上升到 int 類型。

++ 自增
-- 自減
使用格式1 :

int i = 0;
i++; i--;

使用格式2 :

int i = 0;
++i; --i;

每當程序執(zhí)行到 ++ 時 诚些, 都會使得變量的值增加 1
每當程序執(zhí)行到 -- 時 飞傀, 都會使得變量的值減少 1

注意 ++ -- 只能操作用于變量
我們發(fā)現(xiàn) ++ -- 既可以出現(xiàn)在變量的前面 還可以出現(xiàn)在變量的后面 有什么區(qū)別嗎?
當 ++ -- 在前面時 會先自增自減再使用變量
當 ++ -- 在后面時 會先使用變量在自增自減

看個例子:

public class MapNullToNothing {
    public static void main(String[] args) {
        int a = 6;
        int b = 3;
        System.out.println(b);//輸出結果是 3
        int i = b++;
        System.out.println(b);//輸出結果是 4
        System.out.println(i);//輸出結果是 3
        int y = b--;
        System.out.println(b);//輸出結果是 3
        System.out.println(y);//輸出結果是 4

        int x = ++a;
        System.out.println(a);//輸出結果是 7
        System.out.println(x);//輸出結果是 7
        int z = --a;
        System.out.println(a);//輸出結果是 6
        System.out.println(z);//輸出結果是 6
    }
}

賦值運算符
分為普通的賦值符 =
還有擴展賦值運算符 += -= *= /= %=
% java里叫 取模
x += y 等價于 x = x+y;
x -= y 等價于 x = x-y;
x = y 等價于 x = xy;
x /= y 等價于 x = x/y;
x %= y 等價于 x = x%y;
擴展的賦值運算還有一個特殊的功能 诬烹,隱含了類型的強制轉換

關系運算符
< > >= <= == !=
兩個值 進行關系運算符運算 那么就變成了關系表達式,關系表達式會返回一個 布爾型 的結果砸烦。

三目運算符
格式: 布爾表達式(表達式結果是布爾值) ? 表達式1(可以返回任意類型的值) :表達式2(可以返回任意類型的值)
x ? y : z ;
執(zhí)行規(guī)則
當程序來到三目運算符時 , 會首先計算布爾表達式的值
如果結果為 true 那么整個表達式選擇表達式1為整個表達式的結果
如果結果為 false 那么整體表達式選擇表達式2為整個表達式的結果
使用三目運算符求值:

// 最大值
max = x > y ? (x > z ? x : z) : (y >z ? y : z) ;
// 最小值
min = x < y ? (x < z ? x : z) : (y < z ? y : z);
// 中間值
num = x > y ? (x < z ? x : ( y > z ? y : z )) : (y < z ? y : (x > z ? x : z));

邏輯運算符
&邏輯與 &&短路與
格式 :
布爾值1 & 布爾值2 結果是 布爾值
布爾值1 && 布爾值2 結果是 布爾值
執(zhí)行規(guī)則:
如果布爾值1 和 布爾值2 結果均為 true 那么整個表達式結果為true
反之 結果為 false

&和&&不同之處
& 如果布爾值1為false的話 仍然會判斷 布爾值2 的值
&&如果布爾值1為false的話 那么直接得到結果 不去判斷 布爾值2
只要沒特殊要求 那么使用 && 因為效率高

|邏輯或 ||短路或
格式:
布爾值1 | 布爾值2 結果是 布爾值
布爾值1 || 布爾值2 結果是 布爾值
執(zhí)行規(guī)則:
如果布爾值1 和 布爾值2 其中有一個值或兩個值為 true 那么整個表達式為 true
反之 整個表達式為 false

不同之處
| 如果布爾值1 為true 仍然會判斷布爾值 2
|| 如果布爾值1位 true 那么不會判斷布爾值2 直接得出結果

!非
格式:
绞吁!布爾值 結果是布爾值 取反
執(zhí)行規(guī)則
如果布爾值 為true 那么結果為 false
如果布爾值 為false 那么結果為 true

^異或
格式
布爾值1 ^ 布爾值2 結果是布爾值
執(zhí)行規(guī)則
當布爾值1 和 布爾值2 一個為 true 一個為 false 時 整個表達式結果是 true
反之 表達式結果為 false

位運算符 
變量 使用位運算符 如果是 byte short char,那么會先提升到 int類型
如果 要用 a * 4 那么效率最高的做法是  a << 2
<<  左移   補0
格式 : x << y
執(zhí)行規(guī)則:x 左移 y位幢痘,等同于  x * 2^y 
例如  5 << 2   == 5 * 2^2
0 0000101 5的補碼
0 0001010 左移一位
0 0010100 左移兩位  2^2 + 2^4 = 20
1 0000101 -5的補碼
1 0010100 左移兩位   == -20 

>>  右移  補符號位
格式: x >> y ,等同于 x / 2^y 
例如  5 >> 1  == 2
0 0000101 5的補碼
0 0000010 右移一位 2

3 >> 1  == 1
0 0000011
0 0000001 == 1

負數(shù) 右移
-5 > 1 = -3     
1 0000011   
1 0000101
1 0000101 -5的補碼
1 0000100 -5的反碼
1 1111011 -5的原碼
        
1   1111101    右移一位  會導致少一位  補符號位
1   0000010    反碼
1   0000011
                
                
                
-4 >> 1
1 0000100 -4的補碼
1 0000011 -4的反碼
1 1111100 -4的原碼
                
1 1111110 -4原碼右移一位  補1
1 0000001 反碼
1 0000010 補碼
                
                
-4 >> 2
1 0000100 -4的補碼
1 0000011 -4的反碼
1 1111100 -4的原碼
                
1 1111111 -4右移2兩位 補兩個1
1 0000000 反碼
1 0000001 補碼
                
注意 :
    正數(shù)右移 補0
    負數(shù)右移 補1
    總體來說 補符號位
                
        
        
>>> 無符號右移
    正數(shù)右移 n位 補0
    負數(shù)右移 n位 補0

    -4 >> 1 == 2147483647
    1 24個1 1111100 -4的原碼    
    01 24個1 111110
                
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末掀泳,一起剝皮案震驚了整個濱河市雪隧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌员舵,老刑警劉巖脑沿,帶你破解...
    沈念sama閱讀 216,843評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異马僻,居然都是意外死亡庄拇,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來措近,“玉大人溶弟,你說我怎么就攤上這事〔t郑!?“怎么了辜御?”我有些...
    開封第一講書人閱讀 163,187評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長屈张。 經常有香客問我擒权,道長,這世上最難降的妖魔是什么阁谆? 我笑而不...
    開封第一講書人閱讀 58,264評論 1 292
  • 正文 為了忘掉前任碳抄,我火速辦了婚禮,結果婚禮上场绿,老公的妹妹穿的比我還像新娘剖效。我一直安慰自己,他們只是感情好焰盗,可當我...
    茶點故事閱讀 67,289評論 6 390
  • 文/花漫 我一把揭開白布璧尸。 她就那樣靜靜地躺著,像睡著了一般姨谷。 火紅的嫁衣襯著肌膚如雪逗宁。 梳的紋絲不亂的頭發(fā)上映九,一...
    開封第一講書人閱讀 51,231評論 1 299
  • 那天梦湘,我揣著相機與錄音,去河邊找鬼件甥。 笑死捌议,一個胖子當著我的面吹牛,可吹牛的內容都是我干的引有。 我是一名探鬼主播瓣颅,決...
    沈念sama閱讀 40,116評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼譬正!你這毒婦竟也來了宫补?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,945評論 0 275
  • 序言:老撾萬榮一對情侶失蹤曾我,失蹤者是張志新(化名)和其女友劉穎粉怕,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體抒巢,經...
    沈念sama閱讀 45,367評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡贫贝,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,581評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片稚晚。...
    茶點故事閱讀 39,754評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡崇堵,死狀恐怖,靈堂內的尸體忽然破棺而出客燕,到底是詐尸還是另有隱情鸳劳,我是刑警寧澤,帶...
    沈念sama閱讀 35,458評論 5 344
  • 正文 年R本政府宣布也搓,位于F島的核電站棍辕,受9級特大地震影響,放射性物質發(fā)生泄漏还绘。R本人自食惡果不足惜楚昭,卻給世界環(huán)境...
    茶點故事閱讀 41,068評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望拍顷。 院中可真熱鬧抚太,春花似錦、人聲如沸昔案。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽踏揣。三九已至庆亡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間捞稿,已是汗流浹背又谋。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留娱局,地道東北人彰亥。 一個月前我還...
    沈念sama閱讀 47,797評論 2 369
  • 正文 我出身青樓,卻偏偏與公主長得像衰齐,于是被迫代替她去往敵國和親任斋。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,654評論 2 354

推薦閱讀更多精彩內容