C中的位置换表

jsj*_*jsj 4 c bit-manipulation

是否存在根据置换表置换位的模式或标准方法,该置换表指定结果的每个位位置 - 从源获取哪个位置.

即表0322会产生的结果0011,从0010

我目前的策略是读表的每个条目 - 创建一个位掩码,然后执行二进制掩模和源的AND,OR`ing与累积的结果.

所以处理第一表项:

result |= ( ( (int) pow(2,table[0]) & source)
Run Code Online (Sandbox Code Playgroud)

这似乎只是昂贵的和重复和家酿.我错过了一些明显标准的简单方法吗?

use*_*109 5

这真的很昂贵,使用该pow功能可实现此.重复和家庭酿制的部分是不可避免的.更好的办法

result = 0;
for ( i = 0; i < table_size; i++ )
{ 
    result <<= 1;
    if ( source & (1 << table[i]) )
        result |= 1;
}
Run Code Online (Sandbox Code Playgroud)