以下に 2 つのコード スニペットを示します。1 つはマクロで、もう 1 つは関数です。それらは同じことをしているように見えますが、それらを実行した後、異なる動作を示しているようで、その理由はわかりません。誰か助けてくれませんか?ありがとう!
#define ROL(a, offset) ((((Lane)a) << ((offset) % LANE_BIT_SIZE)) ^ (((Lane)a) >> (LANE_BIT_SIZE-((offset) % LANE_BIT_SIZE))))
Lane rotateLeft(Lane lane, int rotateCount)
{
return ((Lane)lane << (rotateCount % LANE_BIT_SIZE)) ^ ((Lane)lane >> (LANE_BIT_SIZE - (rotateCount % LANE_BIT_SIZE))) ;
}
注: レーン タイプは unsigned int であり、LANE_BIT_SIZE はレーンのサイズをビット数で表した数値です。