给定两个浮点数A和B,它们是命令行参数,我必须创建方法对它们进行逐位运算。包括And,Or,Not,xOr,浮点加法等......
如何访问C中的每个位?我需要访问特定的1和0。知道怎么样?
答案 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)
您必须首先确定浮点数上的按位运算应该做什么,因为您不能对浮点数执行按位运算。
如果你将浮点数转换为无符号类型,或将符号,指数和尾数分成三个单独的无符号变量,那么比特移位的结果应该是什么?