在“深入”中看到的位求和的牛X方法

本文介绍了一种通过并行计算优化二进制位求和过程的方法,采用并行计算对8个单字节数据进行位求和,显著提高了运算效率。代码实现展示了这一技巧,包括对数据进行位操作和最终结果的处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        《深入理解计算机系统》P193练习3.49介绍了一种对二进制位求和的快速思路,本来这题是一道逆向工程的题目。

        通常我们对一个二进制数的所有位求和都是通过对一位位的累加来求得,这样如果需要对一个64位数据进行位求和就要进行64次循环。但这里我们并行地计算8单字节的和来对数据进行位求和。上代码:

long fun(unsigned long x)
{
	long val = 0;
	int i;
	for( i = 0; i < 8; i++ )
	{
		val += x & 0x0101010101010101L;
		x >>= 1;
	}
	val += ( val >> 32 );
	val += ( val >> 16 );
	val += ( val >> 8 );
	return val & 0xFF;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值