Go语言圣经练习4.1

前言

网上看到好几个相同的错误版本,因此提供下正确的。

代码

找到的错误版本

func compareSha256(str1 string,str2 string)int{
        a := sha256.Sum256([]byte(str1))
        b := sha256.Sum256([]byte(str2))
        num := 0
        //循环字节数组
        for i:=0;i<len(a);i++{
                        //1个字节8个bit,移位运算,获取每个bit
                        for m:=1;m<=8;m++{
                                //比较每个bit是否相同
                                if (a[i] >> uint(m))!=(b[i] >>uint(m)){
                                        num++
                                }   
                        }   
        }   
        return num 
}

其中, 判断bit位是否相同是这么写的
if (a[i] >> uint(m))!=(b[i] >>uint(m)) ??? 不应该是取出每个bit,来判断是否同为1或者同为0吗?直接右移判相等是什么操作???
以45=(00101101)2 与 75=(01001011)2 为例最后两次右移相等,按上述计算方法结果为6,实际不同的bit只有4个。

正确版本提供如下

func compareSha256(str1 string, str2 string) int {
	a := sha256.Sum256([]byte(str1))
	b := sha256.Sum256([]byte(str2))
	num := 0
	// 循环字节数组
	for i := 0; i < len(a); i++ {
		for m := 0; m <= 7; m++ { // 对比字节是否相同
			if (a[i] & (1<<m)) != (b[i] & (1<<m)) {
				num++
			}
		}
	}
	return num
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章