前导零、后导零、最高有效位、最低有效位计算(C)

发布时间:2026/10/25 1:29:06
前导零、后导零、最高有效位、最低有效位计算(C)

前导0(CLZ)

int32_tcount_leading_zeros(uint32_tinput){if(input==0)return32;// 全0的特例intclz=0;if(!(input>>16)){clz+=16;x<<=16;}if(!(input>>24)){clz+=8;x<<=8;}if(!(input>>28)){clz+=4;x<<=4;}if(!(input>>30)){clz+=2;x<<=2;}if(!(input>>31)){clz+=1;}returnclz;}

后导0(CTZ)

int32_tcount_trailing_zeros(uint32_tinput){if(input==0)return32;intctz=0;if((input&0xFFFF)==0){ctz+=16;x>>=16;}if((input&0xFF)==0){ctz+=8;x>>=8;}if((input&0xF)==0){ctz+=4;x>>=4;}if((input&0x3)==0){ctz+=2;x>>=2;}if((input&0x1)==0){ctz+=1;}returnctz;}

计算最高有效位(MSB)

inthighest_bit_position(uint32_tx){if(x==0)return-1;intposition=0;if(x>>16){position+=16;x>>=16;}if(x>>8){position+=8;x>>=8;}if(x>>4){position+=4;x>>=4;}if(x>>2){position+=2;x>>=2;}if(x>>1){position+=1;}returnposition;}

计算最低有效位(LSB)

intfind_lowest_bit_position(uint32_tx){if(x==0)return-1;intposition=0;if((x&0x0000FFFF)==0){position+=16;x>>=16;}if((x&0x000000FF)==0){position+=8;x>>=8;}if((x&0x0000000F)==0){position+=4;x>>=4;}if((x&0x00000003)==0){position+=2;x>>=2;}if((x&0x00000001)==0){position+=1;}returnposition;}