这可能是一个简单的解决方案,只是躲避了我。 具体来说,我正在使用 sin() 函数在画布上动态创建圆上等距点的位置。 创建这些点后,我将通过计算点之间的斜率并在每个斜率步骤处重新绘制形状来动画从一个点移动到下一个点的形状。
问题是,根据坐标值,斜率步长可能只是从 a 点到 b 点的一个步长。 我需要形状沿着路径移动,而不仅仅是点到点跳跃。
我想做的是强制位置坐标 (x, y) 为偶数,允许坡度值始终可约化。 所以,问题的简单部分是...
如何检查 int 值是否为偶数? 如果不是,我将简单地在坐标值上加 1。
int newNumber = someInt % 2 == 0 ? someInt : someInt + 1;
要查看整数是否为偶数,请执行以下操作:
- 检查其值是否与 0 模 2 全等。那是
value MOD 2 == 0
.在 C 风格的语言中,这通常表示为value % 2 == 0
。 - 或者,检查位 0 的值。那是
value BITWISE-AND 0x01 == 0
.在 C 风格的语言中,这通常表示为(value & 0x01) == 0
。
如果你不关心你舍入的方向,你可以在单个操作中通过按位取值和掩码 0xFFFE
(当然填充到整数的宽度)来均匀化整数,这将强制将 0 位设置为零。也就是说value := value BITWISE-AND 0xFFFE
,或者在C风格的语言中value &= 0xFFFE
。
在上面做一个mod 2。 如果余数为 0,则为偶数。
.VB:
暗偶数 = (3 mod 2 = 0 )
很难给你细节,因为你没有给出很多,但你应该研究一下模运算。
对于整数,虽然使用模会给你正确的答案,但它需要除法。除法不如按位运算快。对于您需要的东西,按位 AND 就足够了。
if(x & 0x1)
{
sdt::cout << "x is odd" << std::endl;
}
else
{
std::cout << "x is even" << std::endl;
}
关键是两个的所有正幂都是偶数。因此,整数的二进制表示可以是奇数的唯一方法是设置了第一位。