C++ 打印数据二进制bit位,以及对位操作的思考

2021-03-27 15:26

阅读:387

标签:lease   isp   main   数据   demo   clu   div   none   spl   

近日,因工作需要,将Python解析结构体bytes转换成0和1表示,为了验证结果是否和C++的一致,

需要C++写一个内存数据从低字节到高字节用0和1来表示demo。

 

技术图片技术图片
#include using namespace std;
int main()
{
    int a;
    do
    {
        cout "Please input a int !=0:\n";
        cin >> a;
        if (a)
        {
           
            for (int i = 0; i 4; i++)
            {
                unsigned char *ch_p = (unsigned char *)&a + i;
                unsigned char ch = *ch_p;
                for(int j=0; j8; j++)
                {
                    if (ch &(1 7-j)))
                    {
                        cout "1";
                    }
                    else
                    {
                        cout "0";
                    }

                }
                cout "  ";

            }
            cout  endl;
        }

    }
    while (a);

    return 0;
}
View Code

技术图片

 

 

 

 从结果来看方法一 和Windows 计算器转换的一致,都是大端的表示方式。

而方法二的输出结果和方法一,字节显示刚好相反,符合Windows 小端的预期。

从方法一的结果错误的原因:

将待计算的n 内存4个字节,共32位 从第到高排序,

分别记为32,31,30, 29,...,1位。

32个位分别构造当前位为1,其他位为0的整数,与之进行&操作,来判断当前位是0 还是1。

在小端的机器上,当进行按位取与操作时, 1 左移位数操作大于8位时,比如1

而是位于左侧第16位,即第17位上。因此无法输出正确的内存表示。

 

C++ 打印数据二进制bit位,以及对位操作的思考

标签:lease   isp   main   数据   demo   clu   div   none   spl   

原文地址:https://www.cnblogs.com/daoist/p/13657755.html

上一篇:javascript

下一篇:Java:equals方法详解


评论


亲,登录后才可以留言!