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

原创 2018年04月15日 18:31:13

  这几天做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;

}

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

汇编—将寄存器中的数值以二进制的形式输出

  • 2013年05月11日 22:08
  • 536B
  • 下载

C语言巧妙运用位运算十进制转化为二进制输出

巧妙运用位运算十进制转化为二进制输出,正数负数都适合代码:#include #include #include int main() { int numb; char *buff ...
  • g535879
  • g535879
  • 2015-09-05 10:20:02
  • 3842

java浮点数的二进制格式分析

float类型在计算机中占用32位其中符号位1位,阶码8位,尾数23位比如3.125f在计算机中存放为:0100 0000 0 100 1000 0000 0000 0000 0000符号:第1位:0...
  • wypdao
  • wypdao
  • 2007-07-06 14:48:00
  • 2065

剑指Offer面试题10二进制中1的个数(位运算)附带一个进制转换题

面试题10:二进制中1的个数 实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例如9的二进制是1001,则输出2。 位运算相关知识:位运算共5种,与(&)是同时为1才为1,或(|)是有一...
  • login_sonata
  • login_sonata
  • 2017-03-04 20:42:15
  • 555

关于浮点数不能进行位运算的问题

float不能直接进行位运算,所以要使用Float类的函数 Float.floatToIntBits()将float变成int,这跟用(int)强制转换不同,函数只是将float数据类型变成int,...
  • qq_20125305
  • qq_20125305
  • 2014-11-16 21:19:48
  • 1405

c语言输出格式总结

C语言输出格式总结 1 一般格式    printf(格式控制,输出表列)    例如:printf("i=%d,ch=%c\n",i,ch);    说明:    (1)“...
  • Aarair
  • Aarair
  • 2015-05-09 00:04:56
  • 397

用移位运算实现一个整数二进制形式的输出--简短程序分析

#include int main () { const int bits = sizeof(int)*8; //一个字节8位,算出是多少位的运算,如32,64 unsigned int ...
  • liyakun1992421
  • liyakun1992421
  • 2013-05-19 23:20:35
  • 627

关于二进制序列的两道典型例题(位运算符)

1.求一个数的二进制序列中1的个数 2.获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列。...
  • chenkaixin_1024
  • chenkaixin_1024
  • 2016-10-11 17:17:45
  • 656

二进制转换及位运算

------- android培训、java培训、期待与您交流! ---------- 进制之间的转换与位运算 二进制、八进制、十进制与十六进制,它们之间的区别在于数运算时逢几进一位。比如说...
  • qq_20974155
  • qq_20974155
  • 2016-02-25 08:53:10
  • 2108

用位运算符将十进制转为二进制

用位运算符将十进制转为二进制代码:#include &amp;lt;stdio.h&amp;gt; void change_binary(char,char []); void print_binar...
  • CLHJSWE
  • CLHJSWE
  • 2017-09-23 12:24:12
  • 720
收藏助手
不良信息举报
您举报文章:关于位运算中将浮点数以二进制输出的问题
举报原因:
原因补充:

(最多只允许输入30个字)