C 基数排序中的位函数

C 基数排序中的位函数,c,algorithm,data-structures,C,Algorithm,Data Structures,基数排序是排序键,以M-数字为基数表示。为了使用基数排序,我需要了解bits函数 unsigned bits(int x, int k, int j) { return (x >> k) & ~(~0 << j); } 无符号位(int x,int k,int j) {return(x>>k)&(~0在函数无符号位(intx,intk,intj)中,x是要排序的值,k是要从x中提取的位的最右位置,j是要从x中提取的位数 如果要对4位值进行基数排序,可以将j设置为

基数排序是排序键,以M-数字为基数表示。为了使用基数排序,我需要了解bits函数

unsigned bits(int x, int k, int j)
{ return (x >> k) & ~(~0 << j); }
无符号位(int x,int k,int j)

{return(x>>k)&(~0在函数
无符号位(intx,intk,intj)
中,
x
是要排序的值,
k
是要从
x
中提取的位的最右位置,
j
是要从
x
中提取的位数

如果要对4位值进行基数排序,可以将
j
设置为4,将
k
设置为0,然后设置为4,然后设置为8,以此类推

该函数的工作原理如下:首先,它将右边的
x
移位
k
位。这是通过表达式
(x>>k)
完成的

另一个表达式是
(~0 k
。通过and运算,所有带零的位都被强制为零。因为第二个表达式的所有位都为0,除了
j
较低的有效位。结果是所有位都被强制为0,除了
j
较低的有效位(最右边)

最终结果是返回值
x
中偏移量
k
处的
j

例如,如果
x
的位为100101001,
k
为3,j为3,则结果将为0000000 101


这是从数字中提取一个数字的二进制等价物。

@TomKarzes我知道你是专业人士,但我只是个新手。有些事情对我来说很难理解。你不能因为我问了一些你清楚知道的问题而投票否决我的问题,你强迫我知道我花了时间回答你的问题。你知道吗在发布帮助之前,甚至都懒得去查操作员。对我来说,你的努力不够。既然你不欣赏,我就删除我的解释。