1. 程式人生 > >java基礎:運算符的基本用法

java基礎:運算符的基本用法

自增 另一個 stat 不同 兩個 流程 ava -- 個數

運算符:

就是對常量和變量進行操作的符號。

算數運算符:

A:+,-,*,/,%,++,--

B:+的用法

a:加法

b:正號

c:字符串連接符

C:/%的區別

數據做除法操作的時候,/取得是商,%取得是余數

D:++--的用法

a:他們的作用是自增或者自減

b:使用

**單獨使用

放在操作數據的前面和後面效果一樣。

a++或者++a效果一樣。

**參與操作使用

放在操作數的前面:先自增或者自減,再參與操作

int a = 10;

int b = ++a;

放在操作數的後面:先參與操作,再自增或者自減

int a = 10;

int b = a++;

public static void main(String[] args) {

//定義變量

int x = 3; //3賦值給int類型的變量x

int y = 4;

System.out.println(x+y);

System.out.println(x-y);

System.out.println(x*y);

System.out.println(x/y); //整數相除只能得到整數

//我就想得到小數,該腫麽辦呢?

//只需要把操作的數據中任意的一個數據變為浮點數

System.out.println(x*1.0/y);

//%的應用

System.out.println(x%y); //得到的是余數

}

註意事項:

A:整數相除只能得到整數。如果想得到小數,必須把數據變化為浮點數類型

B:/獲取的是除法操作的商,%獲取的是除法操作的余數

++;--的使用:就是對變量進行自增或者自減1

單獨使用:

放在操作數的前面和後面效果一樣。(這種用法是我們比較常見的)

參與運算使用:

放在操作數的前面,先自增或者自減,然後再參與運算。

放在操作數的後面,先參與運算,再自增或者自減。

code:

public static void main(String[] args) {

//定義兩個變量

int x = 3;

int y = 4;

//字符串的拼接

//System.out.println("x:"+x);

//System.out.println("y:"+y);

System.out.println("x:"+x+",y:"+y);

//單獨使用

//x++;

//y--;

++x;

--y;

//System.out.println(x);

System.out.println("x:"+x+",y:"+y);

//意外的類型,常量是不可以這樣做的

//System.out.println(10++);

System.out.println("-------------------");

//參與運算使用

int a = 3;

int b = 4;

//int c = a++;

//int d = b--;

int c = ++a;

int d = --b;

System.out.println("a:"+a); //4, 4

System.out.println("b:"+b); //3, 3

System.out.println("c:"+c); //3, 4

System.out.println("d:"+d); //4, 3

}

demo:

/*

++,--

第一題:

int a = 10;

int b = 10;

int c = 10;

a = b++;

c = --a;

b = ++a;

a = c--;

請分別計算出a,b,c的值

第二題:

int x = 4;

int y = (x++)+(++x)+(x*10);

請分別計算出x,y的值

*/

class OperatorTest {

public static void main(String[] args) {

int a = 10;

int b = 10;

int c = 10;

a = b++; //a=10,b=11,c=10

c = --a; //a=9,b=11,c=9

b = ++a; //a=10,b=10,c=9

a = c--; //a=9,b=10,c=8

System.out.println("a:"+a);

System.out.println("b:"+b);

System.out.println("c:"+c);

System.out.println("--------------");

int x = 4;

int y = (x++)+(++x)+(x*10);

//4+6+60

//x=5,6

System.out.println("x:"+x);

System.out.println("y:"+y);

}

}

+號的用法:

A:加法

B:正號

C:字符串連接符

code:

public static void main(String[] args) {

//加法

System.out.println(3+4);

//正號

System.out.println(+4);

System.out.println(‘a‘);

System.out.println(‘a‘+1); //這裏是加法

//字符串連接符

System.out.println("hello"+‘a‘+1);

System.out.println(‘a‘+1+"hello");

}

賦值運算符:

基本的賦值運算符:=

=右邊的數據賦值給左邊。

擴展的賦值運算符:+=,-=,*=,/=,%=

+= 把左邊和右邊做加法,然後賦值給左邊。

code:

public static void main(String[] args) {

//定義一個變量

int x = 10;

//其他用法

int a,b;

a = b = 10;

System.out.println(a);

System.out.println(b);

System.out.println("-----------");

//定義一個變量

int y = 10;

y += 20;

System.out.println(y);

}

code

/*

short s=1;s = s+1;

short s=1;s+=1;

上面兩個代碼有沒有問題,如果有,那裏有問題。

為什麽第二個木有問題呢?

擴展的賦值運算符其實隱含了一個強制類型轉換。

s += 1;

不是等價於 s = s + 1;

而是等價於 s = (s的數據類型)(s + 1);

*/

class OperatorTest {

public static void main(String[] args) {

//short s = 1;

//s = s + 1;

//System.out.println(s);

short s = 1;

s += 1; //好像是 s = s + 1;

System.out.println(s);

}

}

比較運算符:

比較運算符:

==,!=,>,>=,<,<=

特點:

無論你的操作是簡單還是復雜,結果是boolean類型。

註意事項:

"=="不能寫成"="

code

public static void main(String[] args) {

int x = 3;

int y = 4;

int z = 3;

System.out.println(x == y);

System.out.println(x == z);

System.out.println((x+y) == (x+z));

System.out.println("------------");

System.out.println(x != y);

System.out.println(x > y);

System.out.println(x >= y);

System.out.println(x < y);

System.out.println(x <= y);

System.out.println("------------");

int a = 10;

int b = 20;

//boolean flag = (a == b);

//boolean flag = (a = b); //這個是有問題的,不兼容的類型

//System.out.println(flag);

int c = (a = b); //b賦值給a,然後把a留下來

System.out.println(c);

}

邏輯運算符:

邏輯運算符:

&,|,^,!

&&,||

特點:

邏輯運算符一般用於連接boolean類型的表達式或者值。

表達式:就是用運算符把常量或者變量連接起來的符合java語法的式子。

算術表達式:a + b

比較表達式:a == b

結論:

&邏輯與:falsefalse

|邏輯或:truetrue

^邏輯異或:相同為false,不同為true

舉例:情侶關系。男男,男女,女男,女女

!邏輯非:falsetrue,非truefalse

特點:偶數個不改變本身。

code

public static void main(String[] args) {

int a = 3;

int b = 4;

int c = 5;

//&邏輯與

System.out.println((a > b) & (a > c)); //false & false = false

System.out.println((a > b) & (a < c)); //false & true = false

System.out.println((a < b) & (a > c)); //true & false = false

System.out.println((a < b) & (a < c)); //true & true = true

System.out.println("---------------");

//|邏輯或

System.out.println((a > b) | (a > c)); //false | false = false

System.out.println((a > b) | (a < c)); //false | true = true

System.out.println((a < b) | (a > c)); //true | false = true

System.out.println((a < b) | (a < c)); //true | true = true

System.out.println("---------------");

//^邏輯異或

System.out.println((a > b) ^ (a > c)); //false ^ false = false

System.out.println((a > b) ^ (a < c)); //false ^ true = true

System.out.println((a < b) ^ (a > c)); //true ^ false = true

System.out.println((a < b) ^ (a < c)); //true ^ true = false

System.out.println("---------------");

//!邏輯非

System.out.println(!(a > b)); //!false = true

System.out.println(!(a < b)); //!true = false

System.out.println(!!(a > b)); //!!false = false

System.out.println(!!!(a > b)); //!!false = true

code:

&&&的區別? 同理|||的區別?

A:最終結果一樣。

B:&&具有短路效果。左邊是false,右邊不執行。

開發中常用的邏輯運算符:

&&,||,!

public static void main(String[] args) {

int a = 3;

int b = 4;

int c = 5;

//&&雙與

System.out.println((a > b) && (a > c)); //false && false = false

System.out.println((a > b) && (a < c)); //false && true = false

System.out.println((a < b) && (a > c)); //true && false = false

System.out.println((a < b) && (a < c)); //true && true = true

System.out.println("----------------");

int x = 3;

int y = 4;

//boolean b1 = ((x++ == 3) & (y++ == 4));

//boolean b1 = ((x++ == 3) && (y++ == 4));

//boolean b1 = ((++x == 3) & (y++ == 4));

boolean b1 = ((++x == 3) && (y++ == 4));

System.out.println("x:"+x);

System.out.println("y:"+y);

System.out.println(b1);

}

位運算符:

&,|,^,~

<<,>>,>>>

要做位運算,首先要把數據轉換為二進制

code:

public static void main(String[] args) {

//&,|,^,~

int a = 3;

int b = 4;

System.out.println(3 & 4);

System.out.println(3 | 4);

System.out.println(3 ^ 4);

System.out.println(~3);

}

分析:因為是位運算,所以我們必須先把數據換算成二進制。

3的二進制:11

00000000 00000000 00000000 00000011

4的二進制:100

00000000 00000000 00000000 00000100

&位與運算:有00

00000000 00000000 00000000 00000011

&00000000 00000000 00000000 00000100

-----------------------------------

00000000 00000000 00000000 00000000

結果是:0

|位或運算:有11

00000000 00000000 00000000 00000011

|00000000 00000000 00000000 00000100

-----------------------------------

00000000 00000000 00000000 00000111

結果是:7

^位異或運算:相同則0,不同則1

00000000 00000000 00000000 00000011

&00000000 00000000 00000000 00000100

-----------------------------------

00000000 00000000 00000000 00000111

結果是:7

~按位取反運算符:0110

00000000 00000000 00000000 00000011

~11111111 11111111 11111111 11111100 (補碼)

補碼:11111111 11111111 11111111 11111100

反碼:11111111 11111111 11111111 11111011

原碼:10000000 00000000 00000000 00000100

結果是:-4

^的特點:一個數據對另一個數據位異或兩次,該數本身不變。

public static void main(String[] args) {

int a = 10;

int b = 20;

System.out.println(a ^ b ^ b); //10

System.out.println(a ^ b ^ a); //20

}

code:請自己實現兩個整數變量的交換

//方式1:使用第三方變量(開發中用的)

/*

int c = a;

a = b;

b = c;

System.out.println("a:"+a+",b:"+b);

System.out.println("------------");

*/

//方式2:用位異或實現(面試用)

//左邊:a,b,a

//右邊:a ^ b

/*

a = a ^ b;

b = a ^ b; //a ^ b ^ b = a

a = a ^ b; //a ^ b ^ a = b

System.out.println("a:"+a+",b:"+b);

*/

//方式3:用變量相加的做法

/*

a = a + b; //a=30

b = a - b; //b=10

a = a - b; //a=20

System.out.println("a:"+a+",b:"+b);

*/

//方式4:一句話搞定

b = (a+b) - (a=b); //b=30-20=10,a=20

System.out.println("a:"+a+",b:"+b);

<<:左移 左邊最高位丟棄,右邊補齊0

>>:右移 最高位是0,左邊補齊0;最高為是1,左邊補齊1

>>>:無符號右移 無論最高位是0還是1,左邊補齊0

code:

public static void main(String[] args) {

//<< <<左邊的數據乘以2的移動次冪

System.out.println(3 << 2); //3*2^2 = 3*4 = 12;

//>> >>左邊的數據除以2的移動次冪

System.out.println(24 >> 2); //24 / 2^2 = 24 / 4 = 6

System.out.println(24 >>> 2);

System.out.println(-24 >> 2);

System.out.println(-24 >>> 2);

}

}

/*

計算出3的二進制:11

00000000 00000000 00000000 00000011

(00)000000 00000000 00000000 0000001100

>>的移動:

計算出24的二進制:11000

原碼:10000000 00000000 00000000 00011000

反碼:11111111 11111111 11111111 11100111

補碼:11111111 11111111 11111111 11101000

11111111 11111111 11111111 11101000

1111111111 11111111 11111111 111010(00) 補碼

補碼:1111111111 11111111 11111111 111010

反碼:1111111111 11111111 11111111 111001

原碼:1000000000 00000000 00000000 000110

結果:-6

>>>的移動:

計算出24的二進制:11000

原碼:10000000 00000000 00000000 00011000

反碼:11111111 11111111 11111111 11100111

補碼:11111111 11111111 11111111 11101000

11111111 11111111 11111111 11101000

0011111111 11111111 11111111 111010(00)

結果:

*/

三元(目)運算符:

格式:

比較表達式?表達式1:表達式2;

比較表達式:結果是一個boolean類型。

執行流程:

根據比較表達式的計算返回一個true或者false

如果是true,就把表達式1作為結果。

如果是false,就把表達式2作為結果。

code:

public static void main(String[] args) {

int x = 100;

int y = 200;

int z = ((x > y)? x: y);

//int z = ((x < y)? x: y);

//int z = ((x == y)? x: y);

//報錯

//int z = ((x = y)? x : y);

System.out.println("z:"+z);

}

code:

獲取兩個整數中的最大值

獲取三個整數中的最大值

比較兩個整數是否相同

public static void main(String[] args) {

//獲取兩個整數中的最大值

int x = 100;

int y = 200;

int max = (x > y? x: y);

System.out.println("max:"+max);

System.out.println("--------");

//獲取三個整數中的最大值

int a = 10;

int b = 30;

int c = 20;

//分兩步:

//A:先比較a,b的最大值

//B:a,b的最大值在和c進行比較

int temp = ((a > b)? a: b);

//System.out.println(temp);

int max1 = (temp > c? temp: c);

System.out.println("max1:"+max1);

//一步搞定

//int max2 = (a > b)?((a > c)? a: c):((b > c)? b: c);

//這種做法不推薦。

//int max2 = a > b?a > c? a: c:b > c? b: c;

//System.out.println("max2:"+max2);

System.out.println("--------");

//比較兩個整數是否相同

int m = 100;

int n = 200;

//boolean flag = (m == n)? true: false;

boolean flag = (m == n);

System.out.println(flag);

}

java基礎:運算符的基本用法