逻辑运算符(且或非),位运算符(异或),函数对象运算(bit_or)
一、逻辑运算符
且、或、非
&& 如果两个操作数都非零,则条件为真
|| 如果两个操作数中有任意一个非零,则条件为真。
! 非
二、位运算符
与、或、非、异或、取反、左移、右移
| 按位或,按二进制位进行"或"运算。运算规则:(有 1 则为 1)
& 按位与,按二进制位进行"与"运算。运算规则:(有 0 则为 0)
^ 异或,相同为0,相异为1
~ 按位取反
<< 二进制左移运算符。将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)。
>> 二进制右移运算符。将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。
1.异或
相同为0,相异为1
0 ^ 0 = 0
0 ^ 1 = 1
1 ^ 0 = 1
1 ^ 1 = 0
2.左移右移
左移数据变大,右移数据变小
三、C++中的函数对象运算符
#include <iostream>
#include <functional>
int main()
{
std::bit_or<int> a;
auto ret1 = a(2, 5); // 等价于 auto ret1 = 2|5
std::logical_and<bool> b;
auto ret2 = b(false, true); //等价于 auto ret2 = false && true;
auto ret3 = std::not_fn(ret2); //等价于 auto ret3 = !ret2;
std::plus<int> c;
auto ret4 = c(2, 4); //等价于 auto ret4 = 2 + 4;
//std::equal_to d; //可以自动识别类型
std::equal_to<int> d;
auto ret5 = d(2, 3); //等价于 auto ret5 = (2 == 3);
std::ranges::equal_to e; // C++ 20
auto ret6 = e(2, 3.3); // auto ret6 = (2 == 3.3);
auto ret7 = e(2, 'b'); // auto ret7 = (2 == 'b');
return 0;
}