Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将按位运算(i&;1)从C&x2B+;到爪哇 我在C++上的一本书/教程中有以下代码: for (int i = 0; i < 256; i++) { droplet_x_offset[i] = random_float() * 2.0f - 1.0f; droplet_rot_speed[i] = (random_float() + 0.5f) * ((i & 1) ? -3.0f : 3.0f); droplet_fall_speed[i] = random_float() + 0.2f; } for(int i=0;i_Java_C++_Bitwise Operators - Fatal编程技术网

Java 将按位运算(i&;1)从C&x2B+;到爪哇 我在C++上的一本书/教程中有以下代码: for (int i = 0; i < 256; i++) { droplet_x_offset[i] = random_float() * 2.0f - 1.0f; droplet_rot_speed[i] = (random_float() + 0.5f) * ((i & 1) ? -3.0f : 3.0f); droplet_fall_speed[i] = random_float() + 0.2f; } for(int i=0;i

Java 将按位运算(i&;1)从C&x2B+;到爪哇 我在C++上的一本书/教程中有以下代码: for (int i = 0; i < 256; i++) { droplet_x_offset[i] = random_float() * 2.0f - 1.0f; droplet_rot_speed[i] = (random_float() + 0.5f) * ((i & 1) ? -3.0f : 3.0f); droplet_fall_speed[i] = random_float() + 0.2f; } for(int i=0;i,java,c++,bitwise-operators,Java,C++,Bitwise Operators,现在,我尝试将其转换为Java,但大多数情况下都很简单: Random random = new Random(); for (int i = 0; i < 256; i++) { dropletXSpeed[i] = random.nextFloat() * 2.0f - 1.0f; dropletRotSpeed[i] = (random.nextFloat() + 0.5f) * ((i & 1) ? -3.0f : 3.0f)

现在,我尝试将其转换为Java,但大多数情况下都很简单:

    Random random = new Random();
    for (int i = 0; i < 256; i++) {
        dropletXSpeed[i] = random.nextFloat() * 2.0f - 1.0f;
        dropletRotSpeed[i] = (random.nextFloat() + 0.5f) * ((i & 1) ? -3.0f : 3.0f);
        dropletFallSpeed[i] = random.nextFloat() + 0.2f;
    }
Random Random=new Random();
对于(int i=0;i<256;i++){
dropletXSpeed[i]=random.nextFloat()*2.0f-1.0f;
液滴速度[i]=(random.nextFloat()+0.5f)*((i&1)?-3.0f:3.0f);
dropletFallSpeed[i]=random.nextFloat()+0.2f;
}
除了Java不接受带有消息的
((i&1)?-3.0f:3.0)
之外:
不兼容的类型:int不能转换为boolean


有人能给我解释一下(
i&1
)到底做了什么,以及它在Java中应该如何被替换吗?

与C/C++不同,在Java中,条件必须计算为布尔值

例如:

int i = 1;
if (i) { ... }
在java中无效

您需要:

(i & 1) != 0 ? -3.0f : 3.0f;

与C/C++不同,Java中的条件必须计算为布尔值

例如:

int i = 1;
if (i) { ... }
在java中无效

您需要:

(i & 1) != 0 ? -3.0f : 3.0f;

对于简单的情况,使用三角图不如公式有效。这是因为缺一根树枝太贵了。你也可以这样做

(3 - 6 * (i & 1))
public float next8bitFloat() {
    return random.nextInt(256) * (1.0 / 256);
}
如果
i
为偶数,则为3;如果为奇数,则为-3

注意:因为有一个循环,所以有一个更简单的解决方案

for (int i = 0; i < 256; i += 2) {
    dropletXSpeed[i] = random.nextFloat() * 2.0f - 1.0f;
    dropletXSpeed[i+1] = random.nextFloat() * 2.0f - 1.0f;
    dropletRotSpeed[i] = (random.nextFloat() + 0.5f) * 3.0f;
    dropletRotSpeed[i+1] = (random.nextFloat() + 0.5f) * -3.0f;
    dropletFallSpeed[i] = random.nextFloat() + 0.2f;
    dropletFallSpeed[i+1] = random.nextFloat() + 0.2f;
}

对于简单的情况,使用三角图不如公式有效。这是因为缺一根树枝太贵了。你也可以这样做

(3 - 6 * (i & 1))
public float next8bitFloat() {
    return random.nextInt(256) * (1.0 / 256);
}
如果
i
为偶数,则为3;如果为奇数,则为-3

注意:因为有一个循环,所以有一个更简单的解决方案

for (int i = 0; i < 256; i += 2) {
    dropletXSpeed[i] = random.nextFloat() * 2.0f - 1.0f;
    dropletXSpeed[i+1] = random.nextFloat() * 2.0f - 1.0f;
    dropletRotSpeed[i] = (random.nextFloat() + 0.5f) * 3.0f;
    dropletRotSpeed[i+1] = (random.nextFloat() + 0.5f) * -3.0f;
    dropletFallSpeed[i] = random.nextFloat() + 0.2f;
    dropletFallSpeed[i+1] = random.nextFloat() + 0.2f;
}

&
是按位and运算符。@ZouZou我知道它是什么。但是
i&1
在做什么?和@Downvoter,请解释。i&1不会返回布尔值1&1=1,它将为您提供
i
位置0处位的值(0或1)。如果你取
i=2
10
二进制),如果(1){}有效,在c/c++i中应用此掩码将给出
(10&1)=0
,但在java中如果(true){}有效
是位and运算符。@zouzu我知道它是什么。但是
i&1
在做什么?和@Downvoter,请解释。i&1不会返回布尔值1&1=1,它将为您提供
i
位置0处位的值(0或1)。如果采用
i=2
10
二进制),如果(1){}有效,则在c/c++i中应用此掩码将给出
(10&1)=0
,如果(true){}有效,则在java中给出valid@peter.petrov不,你是对的。。。这是我四年不写C所得到的。I&1要么是1(如果我是奇数),要么是0(如果我是偶数)。是吗?;)很清楚,我认为我的原稿在这种情况下是可以的,但是与C计算的正确等价性是
!=0
。C中的非零值等于
true
@peter.petrov不,你说得对。。。这是我四年不写C所得到的。I&1要么是1(如果我是奇数),要么是0(如果我是偶数)。是吗?;)很清楚,我认为我的原稿在这种情况下是可以的,但是与C计算的正确等价性是
!=0
。C中的非零值等于
true