这只是一个简单方便的结构,用于定义一个变量类型和简单的运算符重载,以便从字符串中获取一个位的值。
首先,我们声明一个结构,所以
接下来,我们需要创建一个私有变量来接受一个字节,所以我们使用一个 unsigned char 并将其命名为“val”
1 2
|
private:
unsigned char val;
|
我们需要能够给字节赋值,所以我们创建子程序来接受字节并将其设置为我们的私有变量
1 2 3 4 5
|
public:
bin(unsigned char v)
{
val=v;
}
|
最后但同样重要的是运算符重载,这样我们就可以决定我们想要哪个位
1 2 3 4
|
bool operator[](unsigned char i)
{
return (val&(1<<i))>>i;
}
|
快速解释一下上面这个可能看起来很复杂的位运算语句——它接受一个数字 (i),然后找到该位是 1 还是 0,然后将返回值设置为该值 (1 或 0)。
所以我们完成的结构是
1 2 3 4 5 6
|
struct bin
{
private:unsigned char val;
public:bin(unsigned char v){val=v;}
bool operator[](unsigned char i){return (val&(1<<i))>>i;}
};
|
现在——如何使用它,在这个例子中,我们将使用一个名为“a”的 unsigned char 变量,它保存“a”的 ASCII 值,即 97——然后找到它的所有位。
1 2 3 4 5 6 7 8 9 10
|
int main()
{
unsigned char a=97; // declare our "a"
for(unsigned int c=7;c!=-1;c--) // create a loop to access all the bits
{
printf("%u",bin(a)[c]); // print out the value of a at bit c.
}
getchar(); // wait for user input so we can see previous output
return 0;
}
|
由此我们应该得到“01100001”——97 的二进制形式。
我希望这对任何人都有所帮助,这是我的第一篇文章——欢迎任何反馈或建议。
Chris。