位操作笔记
文章平均质量分 70
位操作相关
dadalaohua
这个作者很懒,什么都没留下…
展开
-
【位操作笔记】计算以10为底整数N的对数 普通方法
用于计算以10为底整数N的对数log10Nlog_{10}Nlog10N。例如 log10100=2log_{10}100=2log10100=2,log101000=3log_{10}1000=3log101000=3。以10为底整数N的整数对数log10Nlog_{10}Nlog10N,当 N 为 32 位非零整数时,整数对数log10Nlog_{10}Nlog10N的值一共只有 0 - 9 这10种情况,所以这个普通方法就是通过判断整数N的值的大小来获取对数log10Nlog_{10}Nlo原创 2022-10-02 23:22:17 · 2584 阅读 · 0 评论 -
【CSDN话题挑战赛】【算法题解】颠倒二进制位
颠倒二进制位这道题本身是一道简单题,解答出来很容易。这里我们主要使用各种不同的方式来解答这道题,这些不同方式的解法亦或者更高效,亦或者更有趣,总之是为了更好的进行发散思考。第一个方法是一个常规的方式,将32位数逐位翻转,从低位到高位将翻转的结果放入结果 ret 中,每翻转一位就将n向右移一位,保证最低位每次都是我们要翻转的位。这个方式二采用的是查表法,这应该是最快的颠倒二进制位的方法了。原创 2022-09-19 23:12:08 · 296 阅读 · 0 评论 -
【位操作笔记】计算以2为底整数N的对数 查表法
用于计算以2为底整数N的对数log2Nlog_2Nlog2N。例如 log28=3log_28=3log28=3,log216=4log_216=4log216=4。该算法通过查表的方式来计算以2为底整数N的对数log2Nlog_2Nlog2N。以2为底整数N的对数log2Nlog_2Nlog2N,与最高有效位(most significant bit set,MSB)的位置相同,例如4 = 0x4 = 0b0100,最高有效位在第2位,与log24=2log_24=2log24=2值相等。然后原创 2022-09-13 23:22:29 · 1889 阅读 · 0 评论 -
【位操作笔记】计算以2为底整数N的对数 普通方法
用于计算以2为底整数N的对数log2Nlog_2Nlog2N。例如 log28=3log_28=3log28=3,log216=4log_216=4log216=4。以2为底整数N的对数log2Nlog_2Nlog2N,与最高有效位(most significant bit set,MSB)的位置相同。例如8 = 0x8 = 0b1000,最高有效位在第3位,与log28=3log_28=3log28=3值相等。该算法就是使用该特性来计算log2Nlog_2Nlog2N的值。实现方式为:注意,原创 2022-08-20 15:46:05 · 2350 阅读 · 0 评论 -
【位操作笔记】位合并 通过掩码
位合并(Merge bits) 通过掩码通过掩码把两个数进行位合并。例如一个数为0x23,另一个数为0x65,假设合并的数要取第一个数的高4位,第二个数的低4位,那么合并后的数就是0x25。算法说明该算法使用了异或来实现,比普通的实现方式节省一次操作。实现代码non_masked_val和masked_val是两个要进行合并的数,mask是掩码。non_masked_val是合并非掩码位,masked_val是合并掩码位。实现方式为:unsigned int Merge_bits(unsig原创 2021-05-31 22:45:03 · 323 阅读 · 0 评论 -
【位操作笔记】位合并 普通方式
位合并(Merge bits) 普通方式通过掩码把两个数进行位合并。例如一个数为0x23,另一个数为0x65,假设合并的数要取第一个数的高4位,第二个数的低4位,那么合并后的数就是0x25。算法说明该算法通过先与掩码,再进行或操作完成。实现代码non_masked_val和masked_val是两个要进行合并的数,mask是掩码。non_masked_val是合并非掩码位,masked_val是合并掩码位。实现方式为:unsigned int Merge_bits(unsigned int原创 2021-05-30 16:35:28 · 886 阅读 · 0 评论 -
【位操作笔记】计算整数的绝对值 4
计算整数的绝对值(integer absolute) 4用于计算整数的绝对值,不使用分支判断。算法说明CPU表示有符号数的是使用补码(two’s complement),正数的补码与原码相同;负数的补码,符号位为1,其余位对原码取反加1。如果CPU表示有符号数使用的是反码(one’s complement),则该算法无效。因为是使用补码(two’s complement),所以有符号数右移,正数高位补0,负数高位补1,例如一个32位整数,右移31位,正数的结果为0x00000000,负数的结果则为原创 2021-02-28 23:42:43 · 358 阅读 · 0 评论 -
【位操作笔记】计算整数的绝对值 3
计算整数的绝对值(integer absolute) 3用于计算整数的绝对值,不使用分支判断。算法说明CPU表示有符号数的是使用补码(two’s complement),正数的补码与原码相同;负数的补码,符号位为1,其余位对原码取反加1。如果CPU表示有符号数使用的是反码(one’s complement),则该算法无效。因为是使用补码(two’s complement),所以有符号数右移,正数高位补0,负数高位补1,例如一个32位整数,右移31位,正数的结果为0x00000000,负数的结果则为原创 2021-01-31 00:05:13 · 390 阅读 · 0 评论 -
【位操作笔记】计算整数的绝对值 2
计算整数的绝对值(integer absolute) 2用于计算整数的绝对值,不使用分支判断。算法说明该算法利用CPU表示有符号数的是使用补码(two’s complement),正数的补码与原码相同;负数的补码,符号位为1,其余位对原码取反加1。如果CPU表示有符号数使用的是反码(one’s complement),则该算法无效。因为是使用补码(two’s complement),所以有符号数右移,正数高位补0,负数高位补1,例如一个32位整数,右移31位,正数的结果为0x00000000,负数原创 2021-01-30 17:21:18 · 580 阅读 · 0 评论 -
【位操作笔记】根据条件来获取相反数 不使用分支判断
根据条件来获取相反数 不使用分支判断根据条件来获取相反数,比如条件为真时得到相反数,或者条件为假时得到相反数。算法说明该算法使用了异或来实现,不使用判断。实现代码当条件为false时,返回相反数。相当于fDontNegate ? v : -v;int Conditionally_negate_a_value_false(int val, bool fDontNegate){ return (fDontNegate ^ (fDontNegate - 1)) * val;}当条件为t原创 2021-01-29 00:17:53 · 190 阅读 · 0 评论 -
【位操作笔记】判断两个整数的符号位是否相反
判断两个整数的符号位是否相反判断两个整数的符号位是否相反,也就是两个数是否一个是正数,一个是负数。算法说明该算法通过异或的结果大小来判断两个整数的符号位是否相反。实现代码bool Detect_opposite_signs(int x, int y){ return ((x ^ y) < 0);}算法计算过程第一步,x ^ y,两个整数先进行异或。第二步,判断异或的结果是否小于0,如果两个整数的符号位相反,那么异或的结果就会让最高位的符号位为1,也就是异或得到的数会小于0原创 2021-01-28 21:51:15 · 2357 阅读 · 0 评论 -
【位操作笔记】计算整数的绝对值 1
计算整数的绝对值(integer absolute) 不使用分支判断用于计算整数的绝对值。算法说明该算法利用CPU表示有符号数的是使用补码(two’s complement),正数的补码与原码相同;负数的补码,符号位为1,其余位对原码取反加1。如果CPU表示有符号数使用的是反码(one’s complement),则该算法无效。因为是使用补码(two’s complement),所以有符号数右移,正数高位补0,负数高位补1,例如一个32位整数,右移31位,正数的结果为0x00000000,负数的结原创 2021-01-27 00:11:29 · 745 阅读 · 0 评论 -
【位操作笔记】计算奇偶性 异或和右移查表法
计算奇偶性(Compute parity) 异或和右移查表法计算奇偶性(Compute parity)指的是,计算一个数所包含1的个数是奇数还是偶数,例如一个8位数0x5b = 0b0101 1011,其中1的个数为5,是奇数;一个8位数0xa3 = 0b1010 0011,其中1的个数为4,是偶数。该算法可以用于奇偶校验位的计算与验证。算法说明先通过移位和位移,将32位数值压缩成4位数值,再使用这个值作为一个索引来进行右移,类似于一个小型的16位奇偶性表格,来查找奇偶性。一共只需要9步运原创 2021-01-26 00:03:18 · 718 阅读 · 0 评论 -
【位操作笔记】计算奇偶性 使用乘法
计算奇偶性(Compute parity) 使用乘法计算奇偶性(Compute parity)指的是,计算一个数所包含1的个数是奇数还是偶数,例如一个8位数0x5b = 0b0101 1011,其中1的个数为5,是奇数;一个8位数0xa3 = 0b1010 0011,其中1的个数为4,是偶数。该算法可以用于奇偶校验位的计算与验证。算法说明使用乘法运算,仅在8次运算中计算32位数值的奇偶性 。实际就是先通过乘法计算出这个数里bit位置1的个数,然后判断个数是奇数还是偶数。如果设置了奇数位数原创 2021-01-25 00:31:46 · 1201 阅读 · 4 评论 -
【位操作笔记】计算奇偶性 使用64位乘法和模除的方法
计算奇偶性(Compute parity) 使用64位乘法和模除的方法计算奇偶性(Compute parity)指的是,计算一个数所包含1的个数是奇数还是偶数,例如一个8位数0x5b = 0b0101 1011,其中1的个数为5,是奇数;一个8位数0xa3 = 0b1010 0011,其中1的个数为4,是偶数。该算法可以用于奇偶校验位的计算与验证。算法说明使用64位乘法和模除,只需要4次操作就能完成对单个字节的计算。实际就是先通过64位的乘法和模除计算出这个数里bit位置1的个数,然后判断原创 2021-01-24 12:35:56 · 379 阅读 · 0 评论 -
【位操作笔记】计算奇偶性 查表法
计算奇偶性 查表法计算奇偶性(Compute parity)指的是,计算一个数所包含1的个数是奇数还是偶数,例如一个8位数0x5b = 0b0101 1011,其中1的个数为5,是奇数;一个8位数0xa3 = 0b1010 0011,其中1的个数为4,是偶数。该算法可以用于奇偶校验位的计算与验证。算法说明使用查表法判断一个数所包含1的个数是奇数还是偶数。 由于8bit数最多只有256个,最多只有256种情况,所以直接通过建表的方式,将这256种情况全部列出来。如果设置了奇数位数,返回tr原创 2021-01-21 00:34:53 · 499 阅读 · 0 评论 -
【位操作笔记】计算奇偶性 普通方法
计算奇偶性 普通方法计算奇偶性指的是,计算一个数所包含1的个数是奇数还是偶数,例如一个8位数0x5b = 0b0101 1011,其中1的个数为5,是奇数;一个8位数0xa3 = 0b1010 0011,其中1的个数为4,是偶数。该算法可以用于奇偶校验位的计算与验证。算法说明使用了一种类似于Brian Kernigan’s的位计数的方法,该算法每次清除从最低位到最高位数的第一个为1的位。所需时间与置位的位数成正比。如果设置了奇数位数,返回true,否则返回false。实现代码bool原创 2021-01-18 00:09:02 · 706 阅读 · 0 评论 -
【位操作笔记】交换数值 使用异或
交换数值 使用异或交换数值指的是,两个数的数值交换,例如x = 1,y = 2,交换之后变成x = 2,y = 1。算法说明通过异或来实现交换数值。实现代码#define SWAP(a, b) (((a) ^= (b)), ((b) ^= (a)), ((a) ^= (b)))上述方法,如果a和b在内存中的同一位置,会不起作用,导致数值变为0。如果可能出现a和b在内存中的同一位置,那么可以加入(a) == (b)进行判断。#define SWAP(a, b) (((a) == (b)) |原创 2021-01-14 00:16:33 · 240 阅读 · 0 评论 -
【位操作笔记】交换数值 使用加减法
交换数值 使用加减法交换数值指的是,两个数的数值交换,例如x = 1,y = 2,交换之后变成x = 2,y = 1。算法说明通过加法和减法来实现交换数值。实现代码方法一:#define SWAP(a, b) ((&(a) == &(b)) || \ (((a) -= (b)), ((b) += (a)), ((a) = (b) - (a))))方法二:#define SWAP2(a, b) ((&(a) == &(b原创 2021-01-13 00:13:30 · 903 阅读 · 0 评论 -
【位操作笔记】判断一个整数是否是2的次幂
判断一个整数是否是2的次幂2的次幂指的是2n,例如20,21,22,23,24,25,……算法说明通过x & (x - 1)来实现,这个公式会使x中位置最靠右并且值为1的bit位置0,例如0101 1010 =>0101 1000。如果是x是2的次幂,那么就只会有一个bit位置1,那么这个公式就会将这个bit置0,所以结果就会是0。例如:20 = 0000 0001 20 - 1= 0000 000021 = 0000 0010 21 - 1= 0000 00012原创 2021-01-08 00:09:29 · 801 阅读 · 2 评论 -
【位操作笔记】位计数算法 分治法统计 5 一组3bit的版本
位计数算法 分治法统计 5 一组3bit的版本位计数位计数(Counting bits set),指的是计算一个数里bit位置1的个数,例如一个8位数0xea = 0b1110 1010,位置1的个数为5。算法说明该算法是基于分治法(divide and conquer)的一个算法版本,这里的分治法是指以三个相邻的bit位为一组,将这三个bit的数值相加,得到的结果放到大小为3bit的位段空间里。然后再将相邻的两个3bit位段数值相加,得到的结果放到6bit的位段空间里,再将剩下所有的6bit的位端原创 2020-12-26 17:18:00 · 478 阅读 · 2 评论 -
【位操作笔记】位计数算法 分治法统计 4 另外一个版本
位计数算法 分治法统计 4 另外一个版本位计数位计数(Counting bits set),指的是计算一个数里bit位置1的个数,例如一个8位数0xea = 0b1110 1010,位置1的个数为5。算法说明该算法是基于分治法(divide and conquer)的一个算法版本,分治法是指以两个相邻的bit位为一组,将这两个bit的数值相加,得到的结果放到大小为2bit的位段空间里。然后再将相邻的两个2bit位段数值相加,得到的结果放到4bit的位段空间里,以此类推,最终完成位计数。分治法可以参照原创 2020-12-23 20:47:23 · 140 阅读 · 0 评论 -
【位操作笔记】位计数算法 分治法统计 3 另外一个版本
位计数算法 分治法统计 3 另外一个版本位计数位计数(Counting bits set),指的是计算一个数里bit位置1的个数,例如一个8位数0xea = 0b1110 1010,位置1的个数为5。算法说明该算法是基于分治法(divide and conquer)的一个算法版本,分治法是指以两个相邻的bit位为一组,将这两个bit的数值相加,得到的结果放到大小为2bit的位段空间里。然后再将相邻的两个2bit位段数值相加,得到的结果放到4bit的位段空间里,以此类推,最终完成位计数。分治法可以参照原创 2020-12-22 21:53:54 · 220 阅读 · 0 评论 -
【位操作笔记】位计数算法 分治法统计 2 优化版本
位计数算法 分治法统计 优化版本位计数算法说明位计数代码32位数的位计数代码算法来源算法计算过程[参考资料]位计数位计数(Counting bits set),指的是计算一个数里bit位置1的个数,例如一个8位数0xea = 0b1110 1010,位置1的个数为5。算法说明该算法是基于分治法(divide and conquer)的优化算法,分治法是指以两个相邻的bit位为一组,将这两个bit的数值相加,得到的结果放到大小为2bit的位段空间里。然后再将相邻的两个2bit位段数值相加,得到的结果放原创 2020-10-28 21:15:30 · 164 阅读 · 0 评论 -
【位操作笔记】位计数算法 分治法统计
位计数算法 分治法统计位计数算法说明位计数代码32位数的位计数代码8位数的位计数代码算法来源算法计算过程[参考资料]位计数位计数(Counting bits set),指的是计算一个数里bit位置1的个数,例如一个8位数0xea = 0b1110 1010,位置1的个数为5。算法说明该算法运用了分治法(divide and conquer),以两个相邻的bit位为一组,将这两个bit的数值相加,得到的结果放到大小为2bit的位段空间里。然后再将相邻的两个2bit位段数值相加,得到的结果放到4bit的原创 2020-10-24 15:50:10 · 510 阅读 · 0 评论 -
【位操作笔记】位计数算法 使用64位指令计算12位数
位计数算法 使用64位指令计算12位数位计数算法说明位计数代码位计数代码算法来源算法计算过程[参考资料]位计数位计数(Counting bits set),指的是计算一个数里bit位置1的个数,例如一个8位数0xea = 0b1110 1010,位置1的个数为5。算法说明该算法用于计算最大为12位的数。这个算法需要在支持快速模除的64位CPU上才能达到高性能的效果。计算12位数的位置1的个数,只需要3次操作。位计数代码位计数代码unsigned int count_12bit(unsigned原创 2020-10-24 15:39:20 · 511 阅读 · 0 评论 -
【位操作笔记】位计数算法 使用64位指令计算32位数
位计数算法 使用64位指令计算32位数位计数算法说明位计数代码位计数代码算法来源算法计算过程[参考资料]位计数位计数(Counting bits set),指的是计算一个数里bit位置1的个数,例如一个8位数0xea = 0b1110 1010,位置1的个数为5。算法说明该算法用于计算32位的数。这个算法需要在支持快速模除的64位CPU上才能达到高性能的效果。计算32位数的位置1的个数,只需要15次操作。位计数代码位计数代码unsigned int count_32bit(unsigned i原创 2020-10-24 00:06:27 · 933 阅读 · 0 评论 -
【位操作笔记】位计数算法 使用64位指令计算24位数
位计数算法 使用64位指令计算24位数位计数算法说明位计数代码位计数代码算法来源算法计算过程[参考资料]位计数位计数(Counting bits set),指的是计算一个数里bit位置1的个数,例如一个8位数0xea = 0b1110 1010,位置1的个数为5。算法说明该算法用于计算最大为24位的数。这个算法需要在支持快速模除的64位CPU上才能达到高性能的效果。计算24位数的位置1的个数,只需要10次操作。位计数代码位计数代码unsigned int count_24bit(unsigne原创 2020-10-22 00:17:47 · 1127 阅读 · 0 评论 -
【位操作笔记】位计数算法 使用64位指令计算14位数
位计数算法 使用64位指令计算14位数位计数算法说明位计数代码算法来源算法计算过程[参考资料]位计数位计数(Counting bits set),指的是计算一个数里bit位置1的个数,例如一个8位数0xea = 0b1110 1010,位置1的个数为5。算法说明这个算法需要在支持快速模除的64位CPU上才能达到高性能的效果。计算14位数的位置1的个数,只需要3次操作。位计数代码unsigned int count_14bit(unsigned int x){ x = (x * 0x20原创 2020-10-17 14:42:59 · 571 阅读 · 0 评论 -
【位操作笔记】位计数算法 Brian Kernighan的方法
位计数算法 Brian Kernighan方法位计数算法说明位计数算法代码32位数的位计数代码8位数的位计数代码算法来源算法计算过程[参考资料]位计数位计数(Counting bits set),指的是计算一个数里bit位置1的个数,例如一个8位数0xea = 0b1110 1010,位置1的个数为5。算法说明该算法每次清除从最低位到最高位数的第一个为1的位,运算次数取决于二进制位中1的个数。位计数算法代码32位数的位计数代码unsigned int count(unsigned int v)原创 2020-10-17 11:36:43 · 384 阅读 · 0 评论 -
【位操作笔记】位计数算法 半字节查表法 32位数
位计数算法 半字节查表法 32位数位计数算法说明位计数代码32位数的位计数代码 方法一32位数的位计数代码 方法二算法计算过程拓展表的生成方法一表的生成 方法二表格生成结果[参考资料]位计数位计数(Counting bits set),指的是计算一个数里bit位置1的个数,例如一个8位数0xea = 0b1110 1010,位置1的个数为5。算法说明该算法通过查表的方式来计算一个数里bit位置1的个数。算法采用半字节查表法,与一般的查表法相比,减少了空间的占用,增加了查表次数。正常查表法参照位操作笔原创 2020-10-17 10:53:48 · 297 阅读 · 0 评论 -
【位操作笔记】位计数算法 半字节查表法 8位数
位计数算法 半字节查表法位计数算法说明位计数代码8位数的位计数代码算法计算过程拓展32位数的位计数代码算法计算过程表的生成[参考资料]位计数位计数(Counting bits set),指的是计算一个数里bit位置1的个数,例如一个8位数0xea = 0b1110 1010,位置1的个数为5。算法说明该算法通过查表的方式来计算一个数里bit位置1的个数。算法采用半字节查表法,与一般的查表法相比,减少了空间的占用,增加了查表次数。正常查表法参照位操作笔记 位计数算法 查表法 8位数。位计数代码8位原创 2020-10-17 10:36:24 · 271 阅读 · 0 评论 -
【位操作笔记】位计数算法 查表法 32位数
位计数算法 查表法 32位数位计数算法说明位计数代码32位数的位计数代码 方法一32位数的位计数代码 方法二算法来源算法计算过程拓展表的生成方法一表的生成 方法二表格生成结果[参考资料]位计数位计数(Counting bits set),指的是计算一个数里bit位置1的个数,例如一个8位数0xea = 0b1110 1010,位置1的个数为5。算法说明该算法通过查表的方式来计算一个数里bit位置1的个数。32bit数最多有4294967296种情况,所以生成32位数的表来进行查表是不合适的,由于8b原创 2020-10-16 23:29:22 · 1265 阅读 · 0 评论 -
【位操作笔记】位计数算法 查表法 8位数
位计数算法 查表法位计数算法说明位计数代码8位数的位计数代码算法来源算法计算过程拓展32位数的位计数代码算法计算过程[参考资料]位计数位计数(Counting bits set),指的是计算一个数里bit位置1的个数,例如一个8位数0xea = 0b1110 1010,位置1的个数为5。算法说明该算法通过查表的方式来计算一个数里bit位置1的个数。由于8bit数最多只有256个,也就是最多只有256种情况,所以直接通过建表的方式,将这256种情况全部列出来。使用查表法进行位计数的速度最快。位计数代原创 2020-10-16 23:04:25 · 1047 阅读 · 0 评论 -
【位操作笔记】位计数算法 普通方法
位计数算法 普通方法位计数算法说明位计数算法代码32位数的位计数代码8位数的位计数代码算法来源算法计算过程[参考资料]位计数位计数(Counting bits set),指的是计算一个数里bit位置1的个数,例如一个8位数0xea = 0b1110 1010,位置1的个数为5。算法说明该算法通过循环遍历数的每一个bit,判断每个bit是否为1,直到结束。如果是8位数,最坏情况为当最高位为1时,会循环8次;如果是32位数,最坏情况为当最高位为1时,会循环32次。位计数算法代码32位数的位计数代码原创 2020-10-16 22:40:52 · 965 阅读 · 0 评论 -
【位操作笔记】位反转算法 时间复杂度O(lg(N))
位反转算法位反转算法说明位反转算法代码32位数的位反转代码8位数的位反转代码算法来源算法计算过程[参考资料]位反转这里的位反转(Bit Reversal),指的是一个数的所有bit位依照中点对换位置,例如0b0101 0111 => 0b1110 1010。也可以叫二进制逆序,按位逆序,位翻转等等。算法说明该算法用于将任意 2N2^N2N 位数的数进行位反转。运算的时间复杂度是O(lg(N))。与位反转算法 通过5 * lg(N)次运算完成相比,这个算法的优点是常数在过程中计算,可以减少内存占原创 2020-10-07 16:08:17 · 593 阅读 · 0 评论 -
【位操作笔记】位反转算法 通过5 * lg(N)次运算完成
位反转算法 5 * lgN次运算 位反转算法说明位反转算法代码算法来源算法计算过程拓展[参考资料]位反转这里的位反转(Bit Reversal),指的是一个数的所有bit位依照中点对换位置,例如0b0101 0111 => 0b1110 1010。也可以叫二进制逆序,按位逆序,位翻转等等。算法说明该算法用于将任意 2n2^n2n 位数的数进行位反转。运算次数为5 * lg(N)次, 由所要反转的数的位数决定,例如要反转32位数,N = 32,那么运算次数为5 * lg(32) = 25次; 要原创 2020-10-07 14:10:56 · 347 阅读 · 0 评论 -
【位操作笔记】位反转算法 愚蠢的方法
位反转算法 愚蠢的方法位反转算法说明位反转算法代码算法计算过程拓展[参考资料]位反转这里的位反转(Bit Reversal),指的是一个数的所有bit位依照中点对换位置,例如0b0101 0111 => 0b1110 1010。也可以叫二进制逆序,按位逆序,位翻转等等。算法说明该算法用于将8bit数进行位反转。直接把数的所有bit位依照中点对换位置,过程直白,但是效率低。位反转算法代码unsigned char reverse(unsigned char x){#define SWAP原创 2020-10-07 13:05:07 · 566 阅读 · 0 评论 -
【位操作笔记】位反转算法 容易理解的方法
位反转算法 容易理解的方法位反转算法说明位反转算法代码32位数的位反转代码8位数的位反转代码算法来源算法计算过程[参考资料]位反转这里的位反转(Bit Reversal),指的是一个数的所有bit位依照中点对换位置,例如0b0101 0111 => 0b1110 1010。也可以叫二进制逆序,按位逆序,位翻转等等。算法说明该算法用于任意位数的位反转。位反转算法代码32位数的位反转代码unsigned int reverse(unsigned int v){ unsigned i原创 2020-10-07 12:10:11 · 2774 阅读 · 0 评论 -
【位操作笔记】位反转算法 通过4次运算完成
位反转算法 4次运算位反转算法说明位反转算法代码算法来源算法计算过程拓展位反转这里的位反转(Bit Reversal),指的是一个数的所有bit位依照中点对换位置,例如0b0101 0111 => 0b1110 1010。也可以叫二进制逆序,按位逆序,位翻转等等。算法说明该算法用于将8bit数进行位反转。算法用到了64bit乘法运算。算法通过4次运算完成位反转操作。位反转算法代码unsigned char reverse(unsigned char x){ x = ((x * 0原创 2020-10-06 22:12:22 · 1096 阅读 · 0 评论