?? 04_expressions_flowcontrol.txt
字號:
運算符:
按照優先級向下排列
1: () [] .
()優先運算
[]數組下標
.引用訪問屬性和方法
結合性:
從左向右
2: ++ -- ! ~
++ 自加
-- 自減
int a=1;
int b=++a;
int b=a++;
! 邏輯非 boolean b=false; !b==true;
~ 按位取反 byte b=0; byte c=~b; -1
+ 正
- 負
結合性:
從右向左
3: * / %
* 乘法
/ 除法
% 求余
結合性:
從左到右
4: + -
+ 加法
- 減法
結合性:
從左到右
5: >> << >>>
>> 左移
<< 右移
>>> 算術右移,無符號右移
結合性:
從左到右
6: > >= < <=
int i=1,j=2;
boolean b=i<j;
結合性:
從左到右
7: == !=
結合性:
從左到右
8: &
& 按位與
同真為真,其他為假
結合性:
從左到右
9: ^
不同為真,其他為假
^ 按位異或
結合性:
從左到右
10: |
同假為假,其他為真
| 按位或
結合性:
從左到右
11: && &
&& 邏輯與(短路)
int a=3,b=5,c=8;
if(a>b&&c++>=9){//如果左邊是真還是假右邊不運算
.....//這里的希望c做的++操作沒有做
}
& 邏輯與(不短路)
int a=3,b=5,c=8;
if(a>b&c++>=9){//不論左邊是真還是假右邊都進行運算
.....//這里的希望c做的++操作沒有做
}
結合性:
從左到右
&根據左右兩邊數據類型來進行判斷.
C++不這樣做是因為它的bool值和整型值是混用的.
12: || |
|| 邏輯或(短路)
| 邏輯或(不短路)
結合性:
從左到右
13: ? :
_?_:_ 三目運算符
結合性:
從左到右
14: = += -= *= /= %= <<= >>= >>>= &= /= ^=
結合性:
從右到左
++ 如果在語句內被使用就要注意它代表
/ 整除
% 求余注意符號的問題.左邊操作數是正數結果就是正數,如果左邊操作數是負數就是負數.
int a=-5;
if(a%2==1){//-5%2==-1
a是奇數.
}esle{
a不是奇數.
}
位運算:
>> 右移,最高位是什么就補什么.不改變符號
相當于除2
<< 出去的不管,地位補0;
>>> 不論你的最高位是0還是1,都用0來補位.
& 先應當把整數的二進制方式畫出來,最后得到新的整數.
^ 按位異或,
| 按位或
使用場景:
&:都為1結果位1,有一個位0都為零
航班的機票系統,航班類型,有個航班的班期.
需要用數據來描述這個班期,直接能看出來那天有航班,那天沒有航班.
這個時候就可以使用byte.
還可以使用boolean[7];
如果使用一個byte的每位來表示每個星期中的一天.
如果1,3,5有航班,那么可以byte s=42.
如果我想去判斷s這個值,周三有沒有航班.s&8但這樣并不通用
結果可以這樣
if((s&(1<<a))>0){//3就是我們要判斷的星期幾.
有航班
}else{
沒有航班
}
結合性是優先級的補充,統一優先級的運算到底該從左向右還是從右向左來算.
表達式:
通過這些運算符加上變量和常量就可以計算出一個唯一的值.
流程控制:
if( ... ){
}else{
}
容易出錯的地方:
int a=3,b=5,c=8,d=0;
if(a>b)
if(c>b)
d=c;
else
d=b;
else和if的匹配原則是壓棧式的依次匹配,在做if else語句最好把{}帶上.
switch(){
case xxx:語句;break;
}
switch的括號里面可以出現那些類型的數據.
byte short int char enum
為什么如果出現一個實數值,由于實數值是近似取值,所以實數變量是補能精確定位一個數的.
float f1=...;
float f2=...;
if(f1==f2){
....;
}
不代表兩個值是相等的.
f1=1.1,f2=2.0f-0.9f;
f1和f2是不相等的.就是由于存儲方式導制的.
去判斷兩個實數值那么需要這樣.
if(Math.abs(f1-f2)<1e-6){
//求f1-f2的絕對值,如果小于10的-6次方就認為兩個數字是相等的.
}
循環:
怎么樣把一個問題轉換成循環控制去進行.
我不知道怎么把現實的邏輯轉換成循環的邏輯來處理.初學程序設計的人的門檻.
例子1:
1-1/3+1/5-1/7-....-1/99;
寫不出代碼,
1.最起碼知道用循環.
2.選擇那種循環語句,什么時候用三種循環中那種,根據方便來定.
如果循環的次數已知那么用for比較方便
如果循環不是根據次數而是根據一些不定的條件,那么用while比較好.
for(表達式1;表達式2;表達式3){
}
while(表達式){
}
do{
}while(表達式);
//4.1定義一個和值,
double s=0.0;
//4.2每循環一次都要求每一項的值
double d=0.0;
//5.2.1定義一個整形值控制正負
for(int i=1;i<50;i++){
//3.我每循環一次我的程序要做什么
//3.1去定這一項的值
//3.2確定這一項的正負.
//3.3把這一項加到循環值上去.
//4.定義一些什么樣的輔助變量
//5思考循環語句怎么寫
//5.1求每一項的值,即確定每一項的值
d=1.0/(2i-1);
//5.2確定每一項正負;
d=d*k;
//5.3求和值
s+=d;
k=-k;
}
例子2:
已知一個整形值int a=2857;
寫一段代碼換成一個新的整數把數字序列到排.
break;
contiune;
loop1:
for(){
while(){
break loop1;
}
}
...
在內層循環也可以帶有語句標號.
loop1:for(){
while(){
contiune loop1;
}
}
題目
編寫程序,求滿足以下條件的四位數.
1.千位數字要大于百位數字.
2.十位數字的語個位數字.
3.千位 + 個位=百位 + 十位.
for(int i=1000;i<9999;i++,j++){
if(
(i/1000) > (i/100%10) &&
(i/10%10) >(i%10) &&
( (i/1000)+(i%10)==(i/100%10)+(i/10%10) )
)
System.out.println(i);
}
byte b1=1;
byte b2=2;
byte b3=b1+b2;
System.out.println(b3);
int i=b1+b2
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -