关于C中的位操作,了解这么多就够了

没有对C语言中位的理解,你一定不会用std::bitset,如果理解里C中的位操作,就真心不必再使用std::bitset了

#include "iostream"
#include <iomanip>

void printBits(unsigned int value)
{
    constexpr int size = 8 * sizeof(unsigned);
    constexpr int mask = (1<<(size - 1));

    std::cout << std::setw(2);
    for(int i = 1;i <= size;++i)
    {
        std::cout << ((mask & value) ? '1' : '0');
        value <<= 1;
        if(i%8 == 0)
            std::cout <<' ';
    }
}

#define PRINT1(a) std::cout << std::setw(8) << #a" ="; \
        printBits(a); \
        std::cout << std::endl;


int main(int,char**)
{
    unsigned int a = 0xff;
    unsigned int b = 3;
    PRINT1(a);
    PRINT1(b);
    PRINT1(a&b);
    PRINT1(a|b);
    PRINT1(a^b);
    PRINT1(a&~b);
    PRINT1(a^=b);
    PRINT1(a^=b);
    return 0;
}

上面的程序的输出如下:


view.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容