1
次のCスニペットを短縮するにはどうすればよいですか? 基本的に、整数Xを与えられたとき、Xを多くのビットに設定したいと考えています。X-manyビットを整数として設定するX
for(i=0;i<NUM; i++){
u32Mask |= (0x1 << i);
}
次のCスニペットを短縮するにはどうすればよいですか? 基本的に、整数Xを与えられたとき、Xを多くのビットに設定したいと考えています。X-manyビットを整数として設定するX
for(i=0;i<NUM; i++){
u32Mask |= (0x1 << i);
}
if(i == 32) // X86 ignores shift count of 32
u32mask = 0xffffffffu;
else
u32mask = (1u << i) - 1;
又ははいBeeOnRope
uint32_t tbl[33] =
{0x00000000u,0x00000001u,0x00000003u,0x00000007u,
0x0000000fu,0x0000001fu,0x0000003fu,0x0000007fu,
0x000000ffu,0x000001ffu,0x000003ffu,0x000007ffu,
0x00000fffu,0x00001fffu,0x00003fffu,0x00007fffu,
0x0000ffffu,0x0001ffffu,0x0003ffffu,0x0007ffffu,
0x000fffffu,0x001fffffu,0x003fffffu,0x007fffffu,
0x00ffffffu,0x01ffffffu,0x03ffffffu,0x07ffffffu,
0x0fffffffu,0x1fffffffu,0x3fffffffu,0x7fffffffu,
0xffffffff};
// ...
u32mask = tbl[i];
によってコメント、この。また、恐ろしい変数シフトの性能を持つ珍しいプラットフォームでは、32項目のルックアップテーブルを使用して直接答えを出すことができます。 – BeeOnRope