《Go语言圣经(中文版)》第二章 PopCount练习题

本文探讨了在Go语言中实现人口计数(即计算一个整数中1的位数)的不同方法,包括直接表达式计算、循环计算、位移算法及清零最低位算法。通过对比这些方法的性能,深入理解位操作的高效性和灵活性。
package popcount

// pc[i] is the population count of i.
var pc [256]byte

func init() {
	for i := range pc {
		pc[i] = pc[i/2] + byte(i&1)
	}
}

// PopCount returns the population count (number of set bits) of x.
func PopCount(x uint64) int {
	return int(pc[byte(x>>(0*8))] +
		pc[byte(x>>(1*8))] +
		pc[byte(x>>(2*8))] +
		pc[byte(x>>(3*8))] +
		pc[byte(x>>(4*8))] +
		pc[byte(x>>(5*8))] +
		pc[byte(x>>(6*8))] +
		pc[byte(x>>(7*8))])
}

// practice 2.3
// 重写PopCount函数,用一个循环代替单一的表达式。比较两个版本的性能。 (11.4节将展示如何系统地比较两个不同实现的性能。)
func PopCountWithForLoop(x uint64) int {
	var counts int
	for i := 0; i < 8; i++ {
		counts += int(pc[x>>(i*8)])
	}
	return counts
}

// practice 2.4
// 用移位算法重写PopCount函数,每次测试最右边的1bit,然后统计总数。
// 比较和查表算法的性能差异。
func PopCountWithBitMove(x uint64) int {
	var counts int
	for i := 0; i < 64; i++ {
		// & 运算,&1,只有最右边第1位是1时&1结果才为1
		if x&1 != 0 {
			counts++
		}
		//右移一位
		x = x >> 1
【华为线刷HW工具箱V7】是一款专为华为设备设计的系统刷机工具,集成了多种实用功能,旨在帮助用户方便快捷地对华为手机或平板进行线刷操作。线刷,即通过USB数据线连接电脑,直接对设备的固件进行更新或恢复,通常用于修复系统故障、升级系统版本或个性化定制设备。该工具箱的核心特点在于其简洁易用的界面和全面的兼容性。对于不熟悉复杂刷机流程的用户,HW工具箱V7提供了一站式的解决方案,降低了刷机的技术门槛。其中包含的`zlibwapi.dll`文件是压缩库文件,用于支持工具箱在处理数据时的压缩和解压缩功能,确保数据传输的高效性。主要功能包括但不限于:1. **固件升级**:用户可以通过该工具箱将华为设备的固件升级到最新版本,以获取新功能和性能优化。2. **系统恢复**:当设备遇到系统崩溃或无法启动等问题时,可以使用此工具进行系统恢复,使设备恢复正常工作状态。3. **刷入第三方ROM**:对于寻求个性化体验的用户,HW工具箱支持刷入第三方开发者编译的Android ROM,如CyanogenMod等。4. **数据备份与还原**:在进行刷机操作前,工具箱能够帮助用户备份重要的个人数据,防止因刷机导致的数据丢失。刷机完成后,也能方便地将数据还原。5. **硬件检测**:部分版本的HW工具箱还包含了硬件检测功能,用户可以检查设备的各项硬件参数,确保设备正常运行。使用HW工具箱V7时,用户需要注意以下几点:- **安全警告**:刷机有一定风险,可能会导致设备变砖,因此在操作前请确保已做好数据备份,并遵循官方或专业论坛的指导。- **驱动安装**:确保电脑上安装了正确的华为USB驱动,以保证设备能被正确识别和通信。- **解锁Bootloader**:部分华为设备在刷机前需要先解锁Bootloader,这通常需要访问华为官方解锁网站进行申请。- **设备连接*
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值