個人認為運算子常見的一些簡單問題

2021-07-09 03:34:06 字數 2400 閱讀 1653

開篇都是這一句,見諒!由於本人是個初學者希望自己的文章不會誤導廣大「群眾「,如果有錯誤之處還望前輩指出。謝謝!

一、擴充套件的運算子(+= ,-= ,*= ,/=,%=)的乙個小問題:存在強制型別的轉換。

short s=1;s = s+1; 

short s=1;s+=1;

上面兩個**有沒有問題,如果有,那裡有問題。

第乙個有問題,第二個沒有問題。

因為:第一行**裡s為指定的string型別,s+1有一次型別轉換,變成了int型別,再賦值給short型別的時候會報錯顯示損失精度。然而擴充套件的賦值運算子其實隱含了乙個強制型別轉換。

s += 1;

不是等價於 s = s + 1;而是等價於 s = (s的資料型別)(s + 1);因而編譯執行成功。

二、比較運算子:

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

特點:無論你的操作是簡單還是複雜,(結果都是boolean型別!!!!。)

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

//boolean flag = (a = b); //這行**是有問題的,不相容的型別;裡面不是比價運算子,而是賦值運算子。因此=不要與==混淆。

三、邏輯運算子:&,|,^,! ,&&,||

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

a:最終結果一樣。

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

||具有短路效果。左邊是(true),右邊不執行。

舉例:int x = 3;

int y = 4;

boolean b1 = ((++x == 3) && (y++ == 4));//(4==3flase)已經錯誤,後邊的不再執行。如果輸出的話:x=4,y=4,b1=flase

boolean b2=((++x==4)||(y++==4);//(++x==4)已經正確,後邊的不再執行。如果輸出的話:x=4;y=4;b2=true

四、位運算子:& | ~  ^ >> << >>>

臨時有事,明天有空接著寫,嘿嘿。謝謝**和補充o(∩_∩)o

期末考試結束,**擼起來!

要做位運算,首先要把資料轉換為二進位制。

例如:求~3和~4:  對補碼的格式進行按位取反,而我們看到取反後的數值是原碼格式

3的二進位制:     00000000 00000000 00000000 00000011   原碼=補碼

~ 11111111 11111111 11111111 11111100   補碼

11111111 11111111 11111111 11111011   反碼

10000000 00000000 00000000 00000100   原碼       這裡是我們看到的結果:-4

^的特點:乙個資料對另乙個資料位異或兩次,該數本身不變。例如:a ^ b ^ b   結果a的值不變

<<:左移左邊最高位丟棄,右邊補齊0       >>:右移最高位是0,左邊補齊0;最高為是1,左邊補齊1    (是啥補啥)   >>>:無符號右移 無論最高位是0還是1,左邊補齊0

<< 把《左邊的資料乘以2的移動次冪:3 << 2=3*2^2=12;         >> 把》左邊的資料除以2的移動次冪:24 >> 2=24/(2^2)=6

*-24 >> 2:

計算出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

五、三目運算子: 比較表示式?表示式1:表示式2;結果是乙個boolean型別的資料,執行流程:先看表達是正確與否;正確執行表示式1,錯誤執行表示式2

判斷大小:int max = a>b?a:b;

system.out.println("兩個數較大的數是:"+max);

//比較三個數的較大的值

int c = 12;

//int flag;常常用temp做為臨時變數,flag用作boolean型別中常見

int temp = a>b?a:b;

int max1= c>temp?c:temp;

system.out.println("三個數較大的數是:"+max1);}}

一些運算子

int a 3 int b a 先把a的值賦給b,a再自增 int c a a先自增,再把值賦給c system.out.println a system.out.println b system.out.println c 結果輸出 535 冪運算,計算2 3 double pow math.po...

位運算子的一些簡單應用

在第一節概述裡就說了,c語言是一種中級語言,能對計算機硬體直接操作,這就涉及到位的概念。一 位的概念 我們知道,在計算機中,一位元組佔8位 現在的某些電腦也有佔16位的 這樣表示的數的範圍為0 255,也即00000000 11111111。位就是裡面的0和1。char c 100 實際上c應該是0...

位運算子的一些簡單應用

在第一節概述裡就說了,c語言是一種中級語言,能對計算機硬體直接操作,這就涉及到位的概念。一 位的概念 我們知道,在計算機中,一位元組佔8位 現在的某些電腦也有佔16位的 這樣表示的數的範圍為0 255,也即00000000 11111111。位就是裡面的0和1。char c 100 實際上c應該是0...