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,但大多数情况下都很简单: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)
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