火山PC位运算--位与、位或、位异或(支持无限参数)

在封装Exdui x64时用到 位与() 但火山PC的 位与 只支持两参数
故 用C++封了个无限参数的 位与() 位或() 位异或() 支持 长整数
主要用到了 initializer_list forward 和模板 用到的头文件 分别对应
#include <initializer_list>
#include
在C++里 位与 符号是 &
位或符号是 |
位异或 符号是 ^ 即按键shift 按键6
以位与()为例:
static void PAnd(long long& str, long long s)
{
str = str & s;
}
template <class… Tand> //参数模板
static long long Bit_and(Tand…args) { //Bit_and 位与 函数名
long long str = -1;//需要注意的是 这里 初始值 位与 -1可以得到原来的值 目的相当于使str 初始值为第一个参数
std::initializer_list{ (PAnd(str, std::forward(args)), 0)…};
return str;
};
关于 -1 : -1就是二进制 很多个1 (可以用电脑计算机切换到程序员模式 转换下看看 )
此处也可以是 十进制 65535 或 4294967295 等等

同理 位或 位异或 直接复制即可 把运算符改下 即可 建议 改下 模板名字 避免重复
需要注意的是 位或 位异或 的 str 初始值 不再是-1 而是0
static void POr(long long& str, long long s)
{
str = str | s;
}
template
static long long Bit_or(TOr…args) {
long long str = 0;
std::initializer_list{ (POr(str, std::forward(args)), 0)…};
return str;
};
static void PXor(long long& str, long long s)
{
str = str ^ s;
}
template
static long long Bit_xor(TXor…args) {
long long str = 0;
std::initializer_list{ (PXor(str, std::forward(args)), 0)…};
return str;
};

本文章附件下载地址: 点击下载附件


版权声明:本文为qq1185907650原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。