今天的學習內容,老師就給我們上了一份大餐,電腦的 進位 ,當然我們學習肯定不會像百度百科那樣的一點點的詳細的去瞭解。畢竟我們學習的是java語言,所以根據java的內容來學二進位的。(內容與標題不太相同見諒啊QAQ,我也不知道該取啥標題) 基本數據類型: 數據類型關鍵字記憶體占用取值範圍 位元組型 b ...
今天的學習內容,老師就給我們上了一份大餐,電腦的 進位 ,當然我們學習肯定不會像百度百科那樣的一點點的詳細的去瞭解。畢竟我們學習的是java語言,所以根據java的內容來學二進位的。(內容與標題不太相同見諒啊QAQ,我也不知道該取啥標題)
基本數據類型:
數據類型 | 關鍵字 | 記憶體占用 | 取值範圍 |
---|---|---|---|
位元組型 | byte | 1個位元組 | -128 至 127 |
短整型 | short | 2個位元組 | -32768 至 32767 |
整型 | int(預設) | 4個位元組 | -2^31^ 至 2^31^-1 |
長整型 | long | 8個位元組 | -2^63^ 至 2^63^-1 19位數字 |
單精度浮點數 | float | 4個位元組 | 1.4013E-45 至 3.4028E+38 |
雙精度浮點數 | double(預設) | 8個位元組 | 4.9E-324 至 1.7977E+308 |
字元型 | char | 2個位元組 | 0 至 2^16^-1 |
布爾類型 | boolean | 1個位元組 |
e+38表示是乘以10的38次方,同樣,e-45表示乘以10的負45次方。
變數在定義(使用代碼展示):
public static void main(String[] args) { byte b = (byte) 128; System.out.println(b); char char1 = 'a'; System.out.println(char1); short short1 = 21292; System.out.println(short1); float float1 = 212212.3123213f; System.out.println(float1); long long1 = 1213312l; System.out.println(long1); double double1 = 121.3112; System.out.println(double1); boolean boo = true; System.out.println(boo); int int1 = 1; System.out.println(int1); int int2 = 1, int3 = 2; System.out.println(int2 + "" + int3); int i, j; i = 2; j = 3; System.out.println(i + "" + j); }
聲明變數的註意點:
數據類型之間的轉換:
類型轉換,分為自動轉換,強制轉換。
自動轉換: 根據數據類型的範圍來覺定:byte-->short,char-->int-->long-->float-->double-->String
就如byte可以自動轉換為int類型,反之int類型不能自動轉換為byte類型。
強制轉換:
public static void main(String[] args) { /* * 強制轉換 案例 * */ int a = 1; char b = (char) a; /* * ==>這裡因為a的範圍比b的範圍要大, 所以編譯器不確定變數啊的大小, * 為了避免a的值超過char 範圍所以需要進行強轉 */ double d = 213.21312; float f = (float) d; /* 同樣這裡的原理也是一樣的 */ double d1 = 21231.121; int i = (int) d1; /* 當然也適用於浮點型轉化為整型 */ /* * 不過需要註意的是當自動轉換時,變數不會因為 轉換而丟失精度, * 例如:int a =2 轉換為 double d = a時。d的值會為2.0。 * 強轉時,變數會因為強轉而丟失精度 * 例如:double d = 3.121322,轉換為int a = (int)d; a的值為3,就等於丟失了小數部分 * */ }
插入一個小知識點:Ascll編碼 ,下麵有一個例子:
public static void main(String[] args) { /* Ascll編碼表案例 */ char a = 'a'; int i = 1; System.out.println(a + i); //輸出98 /* 我們知道 char類型能自動轉換為int類型從輸出值為98可以反過來算出 變數a為97, *為什麼為97,因為在Ascll表中a的Ascll值為97。 * */ }
關於類型的強轉,下麵還有一個細節的知識點:
下麵的程式有問題嗎?
public static void main(String[] args){
short s = 1;
s+=1;
System.out.println(s);
}
分析: s += 1
邏輯上看作是s = s + 1
計算結果被提升為int類型,再向short類型賦值時發生錯誤,因為不能將取值範圍大的類型賦值到取值範圍小的類型。但是,s=s+1進行兩次運算
,+=
是一個運算符,只運算一次,並帶有強制轉換的特點,也就是說s += 1
就是s = (short)(s + 1)
,因此程式沒有問題編譯通過,運行結果是2。
因此,這裡要說一點的是,賦值運算符預設進行了強制類型轉換。
/* ======================================================================== */
其實還學了運算符,但對於我的用處不怎麼大所以就不撰寫了。無非是一些加減乘除,我就直接扣兩張圖放著。
運算符:
算數運算符:
算數運算符 | 作用 | 例子(a=11,b=2) |
---|---|---|
+ |
加法運算,字元串連接運算 | 13=a+b; |
- |
減法運算 | 9=a-b; |
* |
乘法運算 | 22=a*b; |
/ |
除法運算,取整除結果 | 5=a/b; |
% |
取模運算,兩個數字相除取餘數 | 1=a%b; |
++ | 自增: 操作數的值增加1 | a++或++a,a的值都為13 |
-- | 自減: 操作數的值減少1 |
賦值運算符:
作用 | 說明 | |
---|---|---|
= |
賦值 | a=10,將10賦值給變數a |
+= |
加後賦值 | a+=b,將a+b的值給a |
-= |
減後賦值 | a-=b,將a-b的值給a |
*= |
乘後賦值 | a*=b,將a×b的值給a |
/= |
除後賦值 | a/=b,將a÷b的商給a |
%= |
取餘後賦值 | a%=b,將a÷b的餘數給a |
關係運算符:
說明 | |
---|---|
== |
a==b,判斷a和b的值是否相等,成立為true,不成立為false |
> |
a>b,判斷a是否大於b,成立為true,不成立為false |
>= |
a>=b,判斷a是否大於或者等於b,成立為true,不成立為false |
< |
a<b,判斷a是否小於b,成立為true,不成立為false |
<= |
a<=b,判斷a是否小於或者等於b,成立為true,不成立為false |
!= |
a!=b,判斷a和b的值是否不相等,成立為true,不成立為false |
邏輯運算符:
作用 | 說明 | |
---|---|---|
& | 邏輯與 | a&b,a和b都是true,結果為true,否則為false |
| | 邏輯或 | a|b,a和b都是false,結果為false,否則為true |
^ | 邏輯異或 | a^b,a和b結果不同為true,相同為false |
! | 邏輯非 | !a,結果和a的結果正好相反 |
&& | 短路與 | 1. 兩邊都是true,結果是true 2. 一邊是false,結果是false 短路與特點:符號左邊是false,右邊不再運算 |
|| | 短路或 | 1. 兩邊都是false,結果是false 2. 一邊是true,結果是true 短路或特點: 符號左邊是true,右邊不再運算 |
! | 取反 | 1. ! true 結果是false 2. ! false結果是true |
三元運算符:
數據類型 變數名 = 布爾類型表達式?結果1:結果2
格式:int a = 3>4? 12312 :123213;
位運算符:
有個帖子寫的還不錯:https://cloud.tencent.com/developer/article/1528990
二進位: 由 0和1組成,逢二進一 例如 1的二進位為 0000 0001 ; 2的二進位為 0000 0010;
2進位轉換為10進位: 十進位整數轉換成二進位採用“除2倒取餘”,十進位小數轉換成二進位小數採用“乘2取整”。
列如 :6轉換為2進位, 6除以2 =3 餘0 接著 3除以2 = 1 餘 1 即為 110 所以6的二進位為 0000 0110;
二進位轉十進位採用按權相加法:https://blog.csdn.net/yuanxiang01/article/details/82503568
位運算:位運算符指的是兩個數之間的位運算,運算過程中都轉換為位元組類型參與運算。比如:數字3轉換為位元組數為0000 0011。
符號 | 作用 | 說明 |
---|---|---|
& | 按位與 | 兩數同位對比,有0則為0 |
| | 按位或 | 兩數同位對比,有1則為1 |
^ | 按位異或 | 兩數同位對比,不同為1,相同為0 |
~ | 按位取反 | 針對一個數,操作數的每一位都取反 |
<< | 按位左移 | 針對一個數,操作數的每位向左移動指定位數,最高位丟棄,尾部空位補0(相當於乘以2的n次方) |
>> | 按位右移 | 針對一個數,操作數的每位向右移動指定位數,頭部空位補符號位數,移除部分丟棄 |
>>> | 無符號右移 |
如下有代碼案列:
public static void main(String[] args) { /* * 位運算符案列 */ System.out.println(2 & 3); /* 按位與 * 2的二進位數為 0000 0010 ;2的二進位為0000 0011 兩數同位對比有0則0, * 所以值為 0000 0010; 所以輸出的值為2。 */ System.out.println(2 | 3); /* 按位或和與恰巧反過來 * 2的二進位數為 0000 0010 ;2的二進位為0000 0011 兩數同位對比有1則1, * 所以值為 0000 0011; 所以輸出的值為3。 */ System.out.println(2^3); /* 按位異或 * 2的二進位數為 0000 0010 ;2的二進位為0000 0011 兩數同位對比不同為1,相同為0, * 所以值為 0000 0001; 所以輸出的值為1。 */ System.out.println(~2); /* 按位取反 * 2的二進位數為 0000 0010 ; 操作數的每一位都進行取反, * 所以值為 1111 1101; 所以輸出的值為-3。 */ System.out.println(2<<3); /* 按位左移 * 2的二進位數為 0000 0010 相當於把2的二進位每位左移3位,尾部用0補齊 * 所以值為 0001 0000; 所以輸出的值為16。 */ System.out.println(-16>>3); /* 按位右移 * 2的二進位數為0001 0000 相當於把2的二進位每位右移3位,頭部用0補齊移出部分丟棄 * 所以值為 0000 0010; 所以輸出的值為2。 */ System.out.println(15>>>2); /* 無符號右移 * 無符號右移運算符和右移運算符的主要區別在於負數的計算,因為無符號右移是高位補0,移多少位補多少個0。 * 15的二進位位是0000 1111 , 右移2位0000 0011,結果為3。 */ }
同樣正在學習的你下麵的題怎麼回答:
1. 簡答題:簡述Java數據類型有哪些。
2. 簡答題:簡述Java變數定義及初始化賦值時要註意的問題。
3. 簡答題:簡述下麵的程式是否有問題,指出問題位置並說明。
1 public static void main(String[] args){
2 byte b1=134;
3 byte b2=21;
4 byte b3=1 + 2;
5 byte b4=b1 + b2;
6 System.out.println(b3);
7 System.out.println(b4);
8 }
4. 編程題:下列程式執行結果為?
public static void main(String[] args){
int x=10;
double y=20.2;
long z=10;
String str=""+x+y*z;
System.out.println("str= " + str);
}
5. 簡答題:下麵程式執行結果為。
public static void main(String[] args){
int i=1;
int j=i++;
int k=i + ++i * j--;
System.out.println(“i=”+i +“,j=”+j + “,k=”+k);
}
6. 簡述題:簡述&與&&的區別。
7. 編程題:使用最有效的方式計算3<< 4的結果。
8. 編程題:兩個變數 int a = 1; int b = 2;如何將兩個變數的值互換。
個人學習,內容簡略