這只是一個簡單方便的結構,用於定義一個變數型別和簡單的運算子過載,以便從字串中獲取一個位的值。
首先,我們宣告一個結構,所以
接下來,我們需要建立一個私有變數來接受一個位元組,所以我們使用一個 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。