关于位运算中将浮点数以二进制输出的问题

  这几天做c++中位运算方面的作业,将内存块的二进制内容反转等都顺利做出,但float和double型以二进制输出却是难了我好久,由于一直想把所用类型的字节赋给四个char,然后再转换为int,一直未能得到正确的结果,最后在临班相似作业的提醒下想到了如下方法,

float arrayx(float x) {
  char *p1 = ( char *)&x;
int length = sizeof(x);
p1 = p1 + length - 1;
for (int j = 0; j < sizeof(x); j++) {
unsigned char tem = 0x80;
for (int i = 0; i < 8; i++) {


if ((*p1)&tem) {
cout << 1;
}
else {
cout << 0;
}
tem >>= 1;
}
cout << " ";
p1--;
}
cout << endl;
return 0;

}

这个方法是通用的哦,可以写成模板的。

同学在讨论这个话题时提到了用?:语句

也就是说,将char类型作为一个条件用是可以的,但是若将它进行位运算来进行对整型数组的赋值,将会出现很大问题。

而既然可以用作条件,就可以用?:语句了,如下

float arrayx(float x) {
char *p1 = (char *)&x;
int length = sizeof(x);
int arr[sizeof(x) * 8 + 1];
p1 = p1 + length - 1;
int m = 0;
for (int j = 0; j < sizeof(x); j++) {
unsigned char tem = 0x80;
for (int i = 0; i < 8; i++) {
arr[sizeof(x) * 8 - m-1]=((*p1)&tem)?1:0;
m++;
tem >>= 1;
}
p1--;
}
for (int i = sizeof(x) * 8 - 1; i >= 0; i--) {
cout << arr[i];
}
cout << endl;
return 0;

}

同样是可以编写为一个简单的模板函数的!

猜你喜欢

转载自blog.csdn.net/Victor145/article/details/79950694