我尝试了这个:
float a = 1.4123;
a = a & (1 << 3);
我收到一个编译器错误,说操作数&
的类型不能为float。
当我执行以下操作时:
float a = 1.4123;
a = (int)a & (1 << 3);
我成功运行了程序。唯一的问题是按位操作是在舍入后获得的整数表示上进行的。
以下也不被允许。
float a = 1.4123;
a = (void*)a & (1 << 3);
我不明白为什么 int
可以转换为 void*
,但 float
却不能。
我这样做是为了解决 Stack Overflow 问题描述中的问题:如何使用遗传算法解决线性方程组?。
a = a & (1<<3)
将清除a
中除第三位以外的所有位,这通常不是遗传算法中想要的结果。如果要清除单个位,则应使用二进制补码运算符并编写类似a = a & ~(1<<3)
的代码。 - mob