運(yùn)算符?加、減、乘、除?
簡(jiǎn)單的說(shuō):C++ 運(yùn)算符只有:條件運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符、數(shù)學(xué)運(yùn)算符、位運(yùn)算符、自增自減運(yùn)算符、賦值 與 自賦值運(yùn)算符
我們先看賦值運(yùn)算符:
#include <iostream>
//自賦值運(yùn)算符
void main()
{
int a = 1;
a += 10;// a = a + 10; a 為 11
a -= 5; // a = a - 5; a 為 6
a *= 3; // a = a * 3; a 為 18
a /= 2; // a = a / 2; a 為 9
a %= 4; // a = a % 4; a 為 1
a &= 10;// a = a & 10; a 為 0
a |= 10;// a = a | 10;
a ^= 5;// a = a ^ 5;
a <<= 3;// a = a << 3;
a >>= 3;// a = a >> 3;
system("pause");
}
條件運(yùn)算符:
#include <iostream>
//條件運(yùn)算符 ? :
/*
假設(shè) 有表達(dá)式 A B C 組成條件表達(dá)式 A ? B : C;
條件運(yùn)算符的嵌套
A ? B : C; B 或者 C 部分 可以再寫成 條件表達(dá)式
A ? (A?B:C) : C; A ? B : (A?B:C);
A ? (A?B:C) : (A?B:C);
其執(zhí)行順序?yàn)椋? 1)執(zhí)行A 判斷 A的結(jié)果 為真 還是 假
2)如果為真 執(zhí)行 B語(yǔ)句 A C 等同于沒(méi)有 只剩下 B;
3) 如果為假 執(zhí)行 C語(yǔ)句 A B 等同于沒(méi)有 只剩下 C;
主語(yǔ) B C 語(yǔ)句 必須是同類型
比如 如果 B 有返回值 是表達(dá)式 那么 C 必須一樣
如果 B 是無(wú)返回值的 代碼語(yǔ)句 C 也必須一樣
std::cout 就沒(méi)有返回值 1 + 1 這個(gè)表達(dá)式 就有返回值
*/
void main()
{
int a, b;
a = 10;
b = 20;
a > b ? std::cout<<"a 大于 b\n" : std::cout<<"a 小于 b\n";
//此處為真 那么 A C 部分 等于沒(méi)有
//整個(gè)語(yǔ)句相當(dāng)于 int c = a + 10;
//所以 是 可以執(zhí)行的 沒(méi)有語(yǔ)句錯(cuò)誤
int c = a < b ? a + 10 : b - 10;
std::cout<<c<<"\n";
system("pause");
}
關(guān)系運(yùn)算符:
#include <iostream>
//關(guān)系運(yùn)算符
//關(guān)系運(yùn)算符的結(jié)果 是 bool
// == != > < >= <=
void main()
{
int a, b;
bool c;
//相等判斷運(yùn)算符 == A == B;
//會(huì)判斷 == 該符號(hào) 左右 兩邊的結(jié)果 是否相等
//如果相等 整個(gè)表達(dá)式 為 真 否則 為假
a = 1;
b = 2;
c = (a == b);
// a 的 值為1 b 的值 為2 那么 a 和 b 不相等 a == b為假
//不相等 判斷運(yùn)算符 != A != B
//判斷不相等 只要 A 和 B 不相等 那么 A != B 為真
// A B 相等 A != B 為假
c = (a != b);
//a 值為 1 b 值為 2 不相等 所以 a != b 為真
//大于判斷運(yùn)算符 > A > B
//a 值為 1 b 值為 2 a 小于 b 所以 a > b 為假
c = (a > b);
//小于判斷運(yùn)算符 < A < B
//a 值為 1 b 值為 2 a 小于 b 所以 a < b 為真
c = (a < b);
//大于等于判斷運(yùn)算符 >= A >= B
//只要 滿足 大于 或者 等于 其中一個(gè)條件 就為真
//a 值為 1 b 值為 2 a 小于 b 所以 a >= b 為假
c = (a >= b);
//小于等于判斷運(yùn)算符 <= A <= B
//只要 滿足 小于 或者 等于 其中一個(gè)條件 就為真
//a 值為 1 b 值為 2 a 小于 b 所以 a <= b 為真
c = (a <= b);
system("pause");
}
邏輯運(yùn)算符:
#include <iostream>
//邏輯運(yùn)算符
void main()
{
//邏輯 與 運(yùn)算符 &&
/*
假設(shè)有表達(dá)式 A、B 組成的邏輯表達(dá)式 A&&B
該表達(dá)式會(huì)返回一個(gè)bool 結(jié)果
表達(dá)式會(huì)先 得到 A 的結(jié)果 并判斷真 假
如果A 為 真 就繼續(xù)判斷 B的 真 假
如果B 為 真 那么整個(gè)表達(dá)式(A&&B) 返回 真
簡(jiǎn)單說(shuō):
A為真 B為真 表達(dá)式 為真
A為真 B為假 表達(dá)式 為假
A為假 B將不計(jì)算 表達(dá)式為 假
*/
int a;
int b;
a = 1;
b = a-- && a++;
std::cout<<a<<" "<<b<<"\n";
a = 1;
b = --a && a++;
std::cout<<a<<" "<<b<<"\n";
//邏輯 或 運(yùn)算符 ||
/*
假設(shè)有表達(dá)式 A、B 組成的邏輯表達(dá)式 A||B
該表達(dá)式會(huì)返回一個(gè)bool 結(jié)果
表達(dá)式會(huì)先 得到 A 的結(jié)果 并判斷真 假
如果A B 有一個(gè) 為真 那么 表達(dá)式 返回真
如果A B 都為假 表達(dá)式 返回 假
簡(jiǎn)單說(shuō):
A為真 B將不計(jì)算 表達(dá)式 為真
A為假 B為真 表達(dá)式 為真
A為假 B為假 表達(dá)式 為假
*/
a = 1;
b = a-- || a++;
std::cout<<a<<" "<<b<<"\n";
a = 1;
b = --a || a++;
std::cout<<a<<" "<<b<<"\n";
//邏輯 非 !
a = 1;
b = 0;
//此處 a的值是1 為真
//在 a 的前面 加上 ! 那么a為假
//也就是 真變假 假變真
!a; //結(jié)果為假
!b; //結(jié)果為真
system("pause");
}
數(shù)學(xué)運(yùn)算符:
#include <iostream>
//加+ 減- 乘* 除/ 取余%
void main()
{
int a = 10;
int b = 20;
int c = 30;
//和原來(lái)學(xué)習(xí)的數(shù)學(xué)計(jì)算方式一樣
//先 乘除 后 加減 優(yōu)先計(jì)算括號(hào)內(nèi)的
int d = a + b * c;
//除法稍有不同 (因?yàn)閰⑴c計(jì)算的變量類型)
//這里10 / 4 的結(jié)果 應(yīng)該是 2.5
//但是 由于 10 是 int 類型的常量 4 也是 int 類型
//的 常量 所以 int / int 結(jié)果 也是一個(gè) int
//所以 這里 10 / 4的結(jié)果是 2 小數(shù)部分 不做保留
d = 10 / 4;
//取余 整數(shù)的除法 我們可以看成兩個(gè)部分 商 和 余
//比如 15 除以 6 得到的結(jié)果就是 2 和 3
//那么 用除號(hào) / 得到的就是 商 2
// 用取余 % 得到的就是 余數(shù)3
d = 15 / 6;
d = 15 % 6;
system("pause");
}
位運(yùn)算符:
#include <iostream>
//位運(yùn)算符
/*
位運(yùn)算符的處理 是在二進(jìn)制位的層面上進(jìn)行處理的
位的操作是非???。
*/
void main()
{
int a = 12345;
int b = 67891;
int c;
char d;
//按位與 & 二進(jìn)制位 同為1 則 為1 反之為0
c = a & b;
//a 0000 0000 0000 0000 0011 0000 0011 1001
//&
//b 0000 0000 0000 0001 0000 1001 0011 1111
//同1為1 反之為0
//c 0000 0000 0000 0000 0000 0000 0011 0001
//按位或 | : 二進(jìn)制位 同為0則為0 反之為1
c = a | b;
//a 0000 0000 0000 0000 0011 0000 0011 1001
//|
//b 0000 0000 0000 0001 0000 1001 0011 1111
//同0為0 反之為1
//c 0000 0000 0000 0001 0011 1001 0011 1111
//按位異或 ^ 相同為0 不同為1
c = a ^ b;
//a 0000 0000 0000 0000 0011 0000 0011 1001
//|
//b 0000 0000 0000 0001 0000 1001 0011 1111
//相同為0 不同為1
//c 0000 0000 0000 0001 0011 1001 0000 0110
int a1 = 100;
int a2 = 1122334;
int a3 = 5566778;
a1 = a1 ^ a2;
a1 = a1 ^ a3;
a1 = a1 ^ a3;
a1 = a1 ^ a2;
//反向異或 可以把數(shù)據(jù)還原 早起用作數(shù)據(jù)加密
//按位取反:~ 1變0 0變1
~c;
//按位左移: <<
c = a << 2;
//a 0000 0000 0000 0000 0011 0000 0011 1001
//左移兩位 最高位會(huì)消失 會(huì)添加2個(gè) 0 到最后位
// 00 - 00 0000 0000 0000 0011 0000 0011 1001 + 00
// 0000 0000 0000 0000 1100 0000 1110 0100
a = 100;
c = a << 2; //左移1位相當(dāng)于 * 2 但是比乘法效率高很多
//按位右移: >>
c = a >> 2;
//a 0000 0000 0000 0000 0011 0000 0011 1001
//右移兩位 最低位會(huì)消失 會(huì)添加2個(gè) 符號(hào)位 到最后位
//也就是說(shuō) 最高位 如果是1 那么添加的就是1
//比如 10001100 最高位是1 右移后就是 11 + 100011 - 00
// 11100011
//如果是 00001100 最高位是0 則添加0即可
//移動(dòng)后 00000011
c = a >> 2; //右移相當(dāng)于 除 2
system("pause");
}
自增自減運(yùn)算符:
#include <iostream>
//自增自減 運(yùn)算符
void main()
{
//自增運(yùn)算符 ++
//假設(shè)有一個(gè)變量 a
// ++a 相當(dāng)于 a = a + 1;
//計(jì)算過(guò)后 a 的值 會(huì)增加1
int a = 1;
int b;
//++a
//++ 會(huì)先計(jì)算 然后 會(huì)把a(bǔ) 增加后的結(jié)果 返回出去
// b得到的就是 增加后的結(jié)果 2
b = ++a;
a = 1;
//a++
//++在后面 就會(huì) 先返回a保存的值 1 b得到的就是 1
//然后 計(jì)算++ a 增加 1
b = a++;
//自減運(yùn)算符 --
a = 1;
//--a
//-- 會(huì)先計(jì)算 然后 會(huì)把a(bǔ) 減少后的結(jié)果 返回出去
// b得到的就是 減少后的結(jié)果 0
b = --a;
a = 1;
//a--
//--在后面 就會(huì) 先返回a保存的值 1 b得到的就是 1
//然后 計(jì)算-- a 減少 1
b = a--;
system("pause");
}
```