今天的學習內容,老師就給我們上了一份大餐,計算機的 進制 ,當然我們學習肯定不會像百度百科那樣的一點點的詳細的去了解,畢竟我們學習的是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個位元組 | true,false |
Java中的默認型別:整數型別是int 、浮點型別是double ,
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--或--a,a的值都為10 |
賦值運算子:
| 符號 | 作用 | 說明 |
|---|---|---|
= |
賦值 | 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次方) |
| >> | 按位右移 | 針對一個數,運算元的每位向右移動指定位數,頭部空位補符號位數,移除部分丟棄 |
| >>> | 無符號右移 | 針對一個數,運算元的每位向右移動指定位數,無論符號數頭部都補0,移除部分丟棄 |
如下有代碼案列:
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;如何將兩個變數的值互換,
個人學習,內容簡略
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/139418.html
標籤:Java
