C 基数排序中的位函数
基数排序是排序键,以M-数字为基数表示。为了使用基数排序,我需要了解bits函数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设置为
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我知道你是专业人士,但我只是个新手。有些事情对我来说很难理解。你不能因为我问了一些你清楚知道的问题而投票否决我的问题,你强迫我知道我花了时间回答你的问题。你知道吗在发布帮助之前,甚至都懒得去查操作员。对我来说,你的努力不够。既然你不欣赏,我就删除我的解释。