1. 程式人生 > 遊戲 >開服上線不到一週?《弈劍行》被黑客組織勒索關服

開服上線不到一週?《弈劍行》被黑客組織勒索關服

+ 加(雙目)

-減(雙目)

*乘(雙目)

/除(雙目)5/3=1(舍掉了小數) 5.0/3.0=1.666667

%求餘(雙目)不能夠帶小數點

+正(單目)

-負(單目)

什麼是目?

1+2(1和2是運算元,有幾個運算元就是幾目)

表示式:用運算子和括號將運算元連線起來的式子

例如:

1+1

'a'+'b'

a+b

a+'b'+pow(a,b)*3/4+5

運算子的優先順序和結合性

注1:優先順序相同的運算子,運算次序由結合性決定。

  • 比如 3 * 4 / 5 % 6,其中乘號、除號和求餘運算子在同一優先順序,結合性是“左到右”,因此先計算 3 * 4,再計算 / 5,最後計算 % 6
  • 再如 -i++,符號和自增運算子在同一優先順序,結合性是“右到左”,因此 -i++ 相當於 -(i++)


注2:* 目運算子是指運算元的個數,比如單目運算子只有一個運算元,雙目運算子有兩個運算元,而三目運算子則有三個運算元。

注3:通過使用小括號可以提升表示式的優先順序至最高。

  • 比如 (1 + 2) * (3 - 4),其中加號、減號運算子的優先順序本身是要低於乘號運算子的,但由於使用了小括號,且結合性均是“左到右”,所以先計算 (1 + 2),再計算 (3 - 4),最後才將前兩者的結果相乘
優先順序 運算子 含義 使用形式 結合性 說明
1 [ ] 陣列下標 陣列名[整型表示式] 左到右 →
( ) 圓括號 (表示式)
. 成員選擇(物件) 物件.成員名
-> 成員選擇(指標) 物件指標->成員名
++ 自增運算子 變數名++ 單目運算子
-- 自減運算子 變數名-- 單目運算子
2 - 負號運算子 -表示式 右到左 ← 單目運算子
(型別) 強制型別轉換 (資料型別)表示式 單目運算子
++ 自增運算子 ++變數名 單目運算子
-- 自減運算子 --變數名 單目運算子
* 取值運算子 *指標表示式 單目運算子
& 取地址運算子 &左值表示式 單目運算子
! 邏輯非運算子 !表示式 單目運算子
~ 按位取反運算子 ~表示式 單目運算子
sizeof 長度運算子 sizeof 表示式 或 sizeof(型別) 單目運算子
3 / 表示式 / 表示式 左到右 → 雙目運算子
* 表示式 * 表示式 雙目運算子
% 餘數(取模) 整型表示式 % 整型表示式 雙目運算子
4 + 表示式 + 表示式 左到右 → 雙目運算子
- 表示式 - 表示式 雙目運算子
5 << 左移 表示式 << 表示式 左到右 → 雙目運算子
>> 右移 表示式 >> 表示式 雙目運算子
6 > 大於 表示式 > 表示式 左到右 → 雙目運算子
>= 大於等於 表示式 >= 表示式 雙目運算子
< 小於 表示式 < 表示式 雙目運算子
<= 小於等於 表示式 <= 表示式 雙目運算子
7 == 等於 表示式 == 表示式 左到右 → 雙目運算子
!= 不等於 表示式 != 表示式 雙目運算子
8 & 按位與 整型表示式 & 整型表示式 左到右 → 雙目運算子
9 ^ 按位異或 整型表示式 ^ 整型表示式 左到右 → 雙目運算子
10 | 按位或 整型表示式 | 整型表示式 左到右 → 雙目運算子
11 && 邏輯與 表示式 && 表示式 左到右 → 雙目運算子
12 || 邏輯或 表示式 || 表示式 左到右 → 雙目運算子
13 ?: 條件運算子 表示式1? 表示式2: 表示式3 右到左 ← 三目運算子
14 = 賦值運算子 變數 = 表示式 右到左
雙目運算子
/= 除後賦值 變數 /= 表示式 雙目運算子
*= 乘後賦值 變數 *= 表示式 雙目運算子
%= 取模後賦值 變數 %= 表示式 雙目運算子
+= 加後賦值 變數 += 表示式 雙目運算子
-= 減後賦值 變數 -= 表示式 雙目運算子
<<= 左移後賦值 變數 <<= 表示式 雙目運算子
>>= 右移後賦值 變數 >>= 表示式 雙目運算子
&= 按位與後賦值 變數 &= 表示式 雙目運算子
^= 按位異或後賦值 變數 ^= 表示式 雙目運算子
|= 按位或後賦值 變數 |= 表示式 雙目運算子
15 , 逗號運算子 表示式1,表示式2,表示式3,… 左到右 →

數字越小,優先順序越高

#include <stdio.h>
#include<math.h>

int main()
{
int i,j, k;
i=1+2;
j=1+2*3;
k=i+j+-1+pow(2,3);
printf("i=%d\n",i);
printf("j=%d\n",j);
printf("k=%d\n",k);
return 0;
}

結果:

i=3
j=7
k=17

型別轉換

當整形與浮點型相加時,系統會自動將坑位較小的型別轉化為較大的型別(為保障資料準確),所以整形轉化為浮點型

例如:

1+2.0=1.0+2.0

#include <stdio.h>


int main()
{

printf("整形輸出:%d\n",1+2.0);
printf("浮點型輸出:%f\n",1+2.0);
return 0;
}

結果:

整形輸出:0
浮點型輸出:3.000000

第一個錯誤的原因:把浮點型強行變為整形輸出,應該將整形變為浮點型

c語言還允許你強制轉換運算元的資料型別

就是在運算元的前邊用小括號將目標資料型別括起來就行了

#include <stdio.h>


int main()
{

printf("整形輸出:%d\n",1+(int)2.0);
printf("浮點型輸出:%f\n",1+2.0);
return 0;
}

結果:

整形輸出:3
浮點型輸出:3.000000

如果2.0為1.8,相加時1.8會捨去1 結果為2

#include <stdio.h>


int main()
{

printf("整形輸出:%d\n",1+(int)(1+0.8));
printf("浮點型輸出:%f\n",1+2.0);
return 0;
}

因為括號優先順序最高,所以先1+0.8=1.8,1.8變為1,後與1相加,輸出結果為2