是否可以重载索引操作符[]以从整数返回位?
Is it possible to overload the indexing operator[] to return bits from an integer?
我不确定这是否可能,因为据我所知,引用不能引用整数中的单个位,但我很想知道是否有一种技术可以实现以下效果。
int z = 0x1234;
z[0] = 1; //set the most significant bit of z.
uint8_t bit = z[30] //get the index 30 bit of z, counting from the left.
如果我不能有z[0] = 1
,我想知道是否至少有可能能够使用重载操作提取位
不直接。您既可以在int
上编写包装器,也可以使用std::bitset
。
不能重载内置类型的操作符。重载操作符必须至少包含一个用户定义的类型(即类或联合类型)。
如果你要包装int
,你可以这样做:
class bitval {
int &val;
unsigned int mask;
public:
bitval(int &i, int idx) : val(i), mask(((unsigned int)(INT_MAX) + 1) >> idx) {}
bitval &operator=(int i) {
if (i) {
val |= mask;
} else {
val &= ~mask;
}
return *this;
}
operator bool() const {
return val & mask;
}
};
class bit {
int &val;
public:
bit(int &i) : val(i) {}
bitval operator[](int idx) { return bitval(val, idx); }
};
那么语法应该是:
int z = 0x1234;
bit(z)[0] = 1;
uint8_t b = bit(z)[30];
顺便说一句,c++程序员通常把最低有效位称为0位,而不是最高有效位,所以mask(1 << idx)
可能会让他们不那么困惑。
相关文章:
- 让bool方法返回其他整数
- C 字符串返回字符串的整数/双精度/长整型值
- 如何使此递归函数从给定的起始位置返回最小的整数?
- 如何优化代码以返回最接近给定整数的数字,但给定列表中不存在?
- 查找存储在二叉搜索树的所有非叶子中的数据总和?(返回整数的独立递归函数
- C++:为什么我的掷骰子函数在掷骰子数量时只返回偶数整数?
- 从 C++ 中定义的异常返回整数
- 递归返回可被给定整数 k 整除的位数
- 类型转换问题:返回为整数而不是浮点/类型
- GMP-将64位整数存储在mpz_t/mpz_class中,并返回64位整数
- 给定一个整数 N>0,区间 [0, 2^N) 中有多少个整数正好有 N-1 个设置位?编写一个返回正确答案的简短函数
- 无法将答案从矢量返回到整数
- 如何使用递归函数返回数组中整数的索引?
- 如何修改此函数,以便如果函数的参数是特定结构,则返回具有较大整数的结构?
- 对于 ((无符号整数)0-1)返回 true>0
- C++ - 整数除以整数返回错误答案
- 整数返回值的按位算术
- C++ 一种方法,该方法将十进制值作为用布尔数组表示的二进制的整数返回
- C++ 如何使模板<T>f() 为整数 T 返回 -1,为指针类型返回 nullptr
- 将函数的整数返回值与 C++ 中的布尔值进行比较