Python c语言中的位旋转函数

Python c语言中的位旋转函数,python,c,Python,C,我需要将python函数转换为c。所有的位运算符在c中似乎都是相同的,所以我想我可以复制代码并添加一个分号。以下是python代码: def旋转器(x,n,w=32): 返回((x>>n)|(x n)|(x在C中,int和其他有符号整数的左移位在溢出发生时是未定义的,负值的右移位是实现定义的。因此,w-n=32向左移位5− 1=具有32位int的31位具有未定义的行为 要避免这种情况,请使用无符号整数类型进行移位。虽然可以使用无符号整数,但最好包括,并使用具有特定宽度的类型,例如uint32\u

我需要将python函数转换为c。所有的位运算符在c中似乎都是相同的,所以我想我可以复制代码并添加一个分号。以下是python代码:

def旋转器(x,n,w=32):
返回((x>>n)|(x n)|(x在C中,
int
和其他有符号整数的左移位在溢出发生时是未定义的,负值的右移位是实现定义的。因此,
w-n
=32向左移位5− 1=具有32位
int
的31位具有未定义的行为

要避免这种情况,请使用无符号整数类型进行移位。虽然可以使用无符号整数,但最好包括
,并使用具有特定宽度的类型,例如
uint32\u t

uint32_t ROTR(uint32_t x, int n, int w)
{
    return x >> n | x << w-n;
}
uint32\u t ROTR(uint32\u t x,int n,int w)
{

返回x>>n | x在C中,一个
int
至少是16位,因此它本身没有足够的位来存储中间结果。bitrot.C:4:27:运行时错误:5乘31位的左移位不能在类型“int”bitrot中表示。C:4:44:运行时错误:移位指数32对于32位类型“int”来说太大。为什么要在sig中旋转位像这样的ned整数?它有可能出现未定义的行为。你应该先转换为无符号类型。@b3nj4m1n是时候获得一本好的C语言书了。C不是一种通过“实验”就能掌握的语言!@b3nj4m1n good=能够生成可读代码,并且每次使用不同的开关编译它时都不会中断。