以vc为例子,int为4字节,32位
int a = 10;
for (int i = 0; i < 32; i ++)
{
cout << (a & 1); //取出最低位
a >>= 1; //将被取出的最低位移出
}
优点:直接采用位运算,比通过计算产生二进制的方法速度快
将float类型的内存二进制字符输出
float b = 20.59375;
void *c = &b; //void 指针指向变量
//直接对void*变量进行操作
//原理:由于float不具备位操作功能,所以转化int进行操作,而采用int = (int)float的方式强转会改变真实float内存中二进制序列
//所以采用void指针指向内存,在通过void指针以原float二进制内存序列转换为int再进行取位操作
for (int i = 0; i < 32; i ++)
{
cout << (*(int *)(c) & 1);
*(int *)(c) >>= 1;
}
将二进制序列转换为float值
//binArry字符数组中已有二进制序列,0-31由地位到高位排列,tmpInt变量为unsigned int型
//以int形式将二进制数组转化为内存中的二进制
for (i = 0; i < 32; i ++)
{
tmpInt += binArry[i] * (int)pow(2, i);
//tmpInt += pow(2, binArry[i]);
}
//由于此时的tmpInt变量中的二进制序列已经与我们需要的float数值的二进制序列相同,所以再次采用void指针强转为float
//cout << tmpInt;
void *p = &tmpInt;
cout << *(float *)p;