C中的位,如何访问C float中的基础位?

时间:2012-02-22 19:37:42

标签: c bit-shift

给定两个浮点数A和B,它们是命令行参数,我必须创建方法对它们进行逐位运算。包括And,Or,Not,xOr,浮点加法等......

如何访问C中的每个位?我需要访问特定的1和0。知道怎么样?

3 个答案:

答案 0 :(得分:3)

这是使用工会的一个例子,正如Keith所说。


/* -std=c99 */
#include <stdio.h>

int main(int argc, char * argv[]) {

  /* note, I'm assuming an int has the same size of a float here */
  assert( sizeof(unsigned int) == sizeof(float) );

  union {
    float floating;
    unsigned int integer;
  } a;

  a.floating = 3.14;

  /* prints the bits in reverse order */
  unsigned int temp = a.integer;
  for( int i = 0; i < sizeof(float)*8; i++ ) {
    printf("%d", temp & 0x1);
    temp = temp >> 1;
  }
}

编辑:将签名的内容更改为未签名。

答案 1 :(得分:1)

通过使用联盟....您可以按照以下方式访问每个部分: -

What's the correct way of using bitfields in C?

或简单地将整个事物与无符号长整理,然后操纵它。

答案 2 :(得分:1)

您必须首先确定浮点数上的按位运算应该做什么,因为您不能对浮点数执行按位运算。

如果你将浮点数转换为无符号类型,或将符号,指数和尾数分成三个单独的无符号变量,那么比特移位的结果应该是什么?