相关疑难解决方法(0)

如何对浮点数执行按位运算

我试过这个:

float a = 1.4123;
a = a & (1 << 3);
Run Code Online (Sandbox Code Playgroud)

我得到一个编译错误,说操作数&不能是float类型.

当我做:

float a = 1.4123;
a = (int)a & (1 << 3);
Run Code Online (Sandbox Code Playgroud)

我让程序运行.唯一的事情是按位操作是在舍入后获得的数字的整数表示上完成的.

以下也是不允许的.

float a = 1.4123;
a = (void*)a & (1 << 3);
Run Code Online (Sandbox Code Playgroud)

我不明白为什么int可以投,void*但不是float.

我这样做是为了解决Stack Overflow问题中描述的问题如何使用遗传算法求解线性方程?.

c++ floating-point bitwise-operators genetic-algorithm

45
推荐指数
5
解决办法
6万
查看次数

OpenGL 着色器 GLSL 中的颜色按位移位

我将 vec4 传递给带有 xyz 和颜色值的着色器,并且尝试将颜色分量按位移动到它们自己的 rg 和 b 浮点,但遇到问题:

顶点着色器:

#version 150

in vec4 position;

out vec2 Texcoord;

uniform mat4 model;
uniform mat4 view;
uniform mat4 proj;

void main()
{
    Texcoord = vec2(position.w, position.w);
    gl_Position = proj * view * model * vec4(position.xyz, 1.0);
} 
Run Code Online (Sandbox Code Playgroud)

片段着色器:

#version 150

in vec2 Texcoord;
out vec4 outColor;

uniform sampler2D tex;

void main()
{
    float data = Texcoord.r;
    float r = (data>> 16) & 0xff;
    float g = (data>> 8) & 0xff;
    float b …
Run Code Online (Sandbox Code Playgroud)

c++ opengl glsl fragment-shader

3
推荐指数
1
解决办法
1万
查看次数

为什么左移浮动值有效?

据我所知, 左移Float类型 不能在浮点值上使用左移运算符.但是当我尝试它时,它给出了与乘以2 n相同的答案.

#include <iostream>
#include <cmath>
using namespace std;

int main() {
    // your code goes here
    float a  = 1.1234;
    int b = (int)(a*(1<<10));
    int c = (int)(a*pow(2,10));
    cout << "\n a = " << a << " b = " << b << " c = " << c;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它输出a = 1.1234 b = 1150 c = 1150

在哪种情况下两个输出(bc)会有所不同?

c++ floating-point bit-manipulation bit-shift

-2
推荐指数
1
解决办法
329
查看次数