C 密码学中的旋转位

C 密码学中的旋转位,c,cryptography,bit-shift,C,Cryptography,Bit Shift,我需要解释这个操作在C语言中的具体含义 我知道这是做了一点左移n,但我不明白这段代码: | (a >> (32 - n)). 以下是完整代码: uint32_t rot_l(uint32_t a, uint8_t n) { return (a << n) | (a >> (32 - n)); } 请帮助我理解这一点。给定一个32位整数a示例: 11000000001111111110000000000000 a给定一个32位整数a: 110000

我需要解释这个操作在C语言中的具体含义

我知道这是做了一点左移n,但我不明白这段代码:

| (a >> (32 - n)).
以下是完整代码:

uint32_t rot_l(uint32_t a, uint8_t n)
{
    return (a << n) | (a >> (32 - n));
}

请帮助我理解这一点。

给定一个32位整数a示例:

11000000001111111110000000000000

a给定一个32位整数a:

11000000001111111110000000000000

一些处理器有一个旋转指令,但C没有实现它:移位的位从末端脱落并消失。所以在它们被收集之前,它们被收集并右移到它们应该在的位置,并用被左移的剩余位来替换。@WeatherVane这32以任何方式与大小字母之间的ASCII值差有关吗?不,它是uint32_t类型中的位数。一些处理器有一个旋转指令,但C并没有实现它:移位的位从末端脱落并消失。所以在它们被收集之前,它们会被收集并向右移动到它们应该在的位置,并用向左移动的剩余位进行修改。@WeatherVane这32是否与大小字母之间的ASCII值差有关?不,这是uint32_t类型中的位数。非常感谢!!非常感谢你!!
00000000000000000000000000000110
00000001111111110000000000000000
00000000000000000000000000000110
================================ |
00000001111111110000000000000110