Java中“x==7”到1(真)或0(假)的性能快速恒定时间评估
我想把一个加密函数从C移植到Java。该函数必须在固定时间内运行,因此不允许有条件分支(以及基于x的表查找)
最初的C代码是:
int x,result;
...
result = (x==7);
...
因此,如果“x==7”,则“result”设置为1,否则设置为0。然后在进一步的计算中使用“result”变量
我现在正在寻找将其转换为Java的最佳方法。正如在Java表达式中计算布尔值而不是整数一样,必须使用运算符模拟上述情况
我目前使用
int x,result;
...
result = (1<<(x-7))&1;
...
这对我来说很好,因为我的x在{0,…,15}范围内。(请注意,移位函数只使用较低的5位,因此当x太大时,会出现误报。)
表达式将被计算数百万次,因此,如果有一个聪明的解决方案,只使用2个运算符而不是3个运算符,这将使整体计算速度更快
共 (0) 个答案