【Java基础】Java基本数据类型与位运算
1.賦值運(yùn)算符
賦值使用操作符“=”。它的意思是“取右邊的值(即右值),把它復(fù)制給左邊(即左值)”。右值可以是任何 常數(shù)、變量或者表達(dá)式 (只要它能 生成 一個(gè)值就行)。但左值必須是一個(gè)明確的,已命名的變量。也就是說,必須有一個(gè)物理空間可以存儲(chǔ)等號(hào)右邊的值。
分類 基本數(shù)據(jù)類型 與 類數(shù)據(jù)類型 的不同
1、 對(duì)基本數(shù)據(jù)類型的賦值是很簡(jiǎn)單的。基本數(shù)據(jù)存儲(chǔ)了實(shí)際的數(shù)值,而并非指向一個(gè)對(duì)象的引用,所以在為其賦值的時(shí)候,是直接將一個(gè)地方的內(nèi)容復(fù)制到了另一個(gè)地方。
2、 但是在為對(duì)象“賦值”的時(shí)候,情況卻放生了變化。對(duì)一個(gè)對(duì)象進(jìn)行操作,我們真正操作的是對(duì)對(duì)象的引用。----這種特殊的現(xiàn)象通常稱作“別名現(xiàn)象”,是Java操作對(duì)象的一種基本方式。
----摘抄自《Thinking In Java》P39
2. 字節(jié)、字、bit、byte的關(guān)系
1 Byte = 8 Bits
1 KB = 1024 Bytes
1 MB = 1024 KB
1 GB = 1024 MB
bps 是 bits per second 的簡(jiǎn)稱。一般數(shù)據(jù)機(jī)及網(wǎng)絡(luò)通訊的傳輸速率都是以「bps」為單位。如56Kbps、100.0Mbps 等等。
Bps即是Byte per second 的簡(jiǎn)稱。而電腦一般都以Bps 顯示速度,如1Mbps 大約等同 128 KBps。
3.基本數(shù)據(jù)類型占據(jù)的空間大小
byte 占位8個(gè)比特,或者說一個(gè)字節(jié).由于是有符號(hào)的,所以最小時(shí)為-128,最大值為+127.
short 占位16比特,兩字節(jié).最小值2^15,最大值2^15 -1.
int 占位32比特,4字節(jié).最小值 2^31,最大值2^31 -1
long 占位64比特,8字節(jié).最小值2^63,最大值2^63-1
float 占位32比特,4字節(jié).最小正非零值2^-149,最大正非零值(2-2^-23)·2^127.
double 占64比特,8字節(jié).最小正非零值為2^-1074,最大正非零值為(2-2^-52)·2^1023
char 占位16比特,2字節(jié).主要是為了支持unicode,所以java中的char是雙字節(jié),而非C++中的一個(gè)字節(jié)
boolean 網(wǎng)上說法比較多,不過根據(jù)字節(jié)碼的內(nèi)容來看,如果是單個(gè)boolean變量,則使用int來存儲(chǔ),如果是boolean數(shù)組,則用byte來存儲(chǔ)。
4. 注意與C/C++的不同
int 在C和C++的占用2個(gè)字節(jié),在java中4個(gè)字節(jié)。
在C++中,char是基礎(chǔ)數(shù)據(jù)類型,8位,1個(gè)字節(jié)。byte不是基礎(chǔ)數(shù)據(jù) 類型,一般是typedef unsigned char byte;這樣子的,也就是說,byte其實(shí)是unsigned char類型,那么也是8位,1個(gè)字節(jié)。不同的是,char可以表示的范圍是-128-127,而byte可以表示的范圍是0-255。
在java中,char和byte都是基礎(chǔ)數(shù)據(jù)類型,其中的byte和C++中的char類型是一樣的,8位,1個(gè)字節(jié),-128-127。但是,char類型,是16位,2個(gè)字節(jié),'\u0000'-'\uFFFF',可以表示0~65535的無符號(hào)數(shù)。
為什么java里的char是2個(gè)字節(jié)?
因?yàn)閖ava內(nèi)部都是用unicode的,所以java其實(shí)是支持中文變量名的,比如string 世界 = "我的世界";這樣的語句是可以通過的。
5.邏輯運(yùn)算符
邏輯運(yùn)算符用于連接布爾型表達(dá)式。、
邏輯運(yùn)算符包括"&","&&","|","||"。
&:表示普通與,所有的判斷條件都要依次執(zhí)行;
&&:若干個(gè)條件,如果前面的條件返回false,那么后面不再判斷,就是false;
|:表示普通或,所有的判斷條件都要依次執(zhí)行;
||:若干個(gè)條件,如果前面的條件返回true,那么后面不再判斷,就是true;
6.位運(yùn)算符
位運(yùn)算符主要針對(duì)二進(jìn)制,
它包括了:按位與(&)、非(~)、按位或(|)、按位異或(^)。
從表面上看似乎有點(diǎn)像邏輯運(yùn)算符,但邏輯運(yùn)算符是針對(duì)兩個(gè)關(guān)系運(yùn)算符來進(jìn)行邏輯運(yùn)算,而位運(yùn)算符主要針對(duì)兩個(gè)二進(jìn)制數(shù)的位進(jìn)行邏輯運(yùn)算。
&:當(dāng)兩邊操作數(shù)對(duì)應(yīng)的位同時(shí)是1時(shí),結(jié)果為1,否則為0。如1100&1010=1000
|:當(dāng)兩邊操作數(shù)對(duì)應(yīng)的位只要有一個(gè)是1,結(jié)果為1,否則為0。如1100|1010=1110
~:操作數(shù)的位,0變1,1變0,這個(gè)是單目運(yùn)算符
^:當(dāng)兩邊操作數(shù)對(duì)應(yīng)的位值不同時(shí),結(jié)果為1,否則為0。如1100^1010=0110
7.位移動(dòng)運(yùn)算符
位移動(dòng)運(yùn)算符主要有三種:
<<(左移):
在沒有溢出的前提下,對(duì)于正數(shù)和負(fù)數(shù),左移一位都相當(dāng)于乘以2的1次方,左移n位就相當(dāng)于乘以2的n次方
>>(帶符號(hào)右移):右移高位補(bǔ)符號(hào)位
右移一位相當(dāng)于除2,右移n位相當(dāng)于除以2的n次方。
>>>(無符號(hào)右移):右移高位補(bǔ)0,
無符號(hào)右移運(yùn)算符只對(duì)32位和64位的值有意義
8.實(shí)例驗(yàn)證
?
?
public static void main(String[] args) {// 1、左移( << )// 0000 0000 0000 0000 0000 0000 0000 0101 然后左移2位后,低位補(bǔ)0://// 0000 0000 0000 0000 0000 0000 0001 0100 換算成10進(jìn)制為20System.out.println(5 << 2);// 運(yùn)行結(jié)果是20// 2、右移( >> ) 高位補(bǔ)符號(hào)位// 0000 0000 0000 0000 0000 0000 0000 0101 然后右移2位,高位補(bǔ)0:// 0000 0000 0000 0000 0000 0000 0000 0001System.out.println(5 >> 2);// 運(yùn)行結(jié)果是1// 3、無符號(hào)右移( >>> ) 高位補(bǔ)0// 例如 -5換算成二進(jìn)制后為:0101 取反加1為1011// 1111 1111 1111 1111 1111 1111 1111 1011// 我們分別對(duì)5進(jìn)行右移3位、 -5進(jìn)行右移3位和無符號(hào)右移3位:System.out.println(5 >> 3);// 結(jié)果是0System.out.println(-5 >> 3);// 結(jié)果是-1System.out.println(-5 >>> 3);// 結(jié)果是536870911// 4、位與( & )// 位與:第一個(gè)操作數(shù)的的第n位于第二個(gè)操作數(shù)的第n位如果都是1,那么結(jié)果的第n為也為1,否則為0System.out.println(5 & 3);// 結(jié)果為1System.out.println(4 & 1);// 結(jié)果為0// 5、位或( | )// 第一個(gè)操作數(shù)的的第n位于第二個(gè)操作數(shù)的第n位 只要有一個(gè)是1,那么結(jié)果的第n為也為1,否則為0System.out.println(5 | 3);// 結(jié)果為7// 6、位異或( ^ )// 第一個(gè)操作數(shù)的的第n位于第二個(gè)操作數(shù)的第n位 相反,那么結(jié)果的第n為也為1,否則為0System.out.println(5 ^ 3);//結(jié)果為6// 7、位非( ~ )// 操作數(shù)的第n位為1,那么結(jié)果的第n位為0,反之。System.out.println(~5);// 結(jié)果為-6}?
總結(jié)
以上是生活随笔為你收集整理的【Java基础】Java基本数据类型与位运算的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [sql]sqlite3板子上安装运行报
- 下一篇: [CF460E]Roland and R