逻辑运算符(且或非),位运算符(异或),函数对象运算(bit_or)

转载:C运算符

一、逻辑运算符

且、或、非

&&  如果两个操作数都非零,则条件为真
||  如果两个操作数中有任意一个非零,则条件为真。
!   非

二、位运算符

与、或、非、异或、取反、左移、右移

|  按位或,按二进制位进行"或"运算。运算规则:(有 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;
}

中文标准库中的函数对象

四、c++17之std::byte

bitset,bitmap,byte

posted @ 2021-03-27 16:43  滴哒哒哒  阅读(259)  评论(0编辑  收藏  举报