h=(h<<4)+*key++; 什么意思
RT
[解决办法]
二进制按位左移4位……
[解决办法]
<<将左侧的数字转成二进制数,然后将各位向左移动右侧数值的位数,如:4,转为00000100,左移2位,则变成00010000,得16。
>>与<<一样,只不过是向右移动罢了。如:6,转为00000110,右移1位,变成00000011,得3。如果移2位,则有一位超出,将截断,则6>>2的返回值就是00000001,为1。
[解决办法]
h=(h<<4)+*key++;
(首先说一下,我也是半路出家修行的,错了不要埋怨我。)
说一下我的理解:
指针key先自增加一,然后解引用为其自身指向的地址所存储的内容值
,把这个值加上变量h左移4位后的值得到的和,最后把这个和赋值给变量h.
[解决办法]
h<<4
h*(2的4次方)
[解决办法]
h=(h<<4)+*key++;
首先运算
h<<4; h左移4位,相当于h*2的4次方
如00000010<<4=00100000 (2<<4=32)
然后与*key的内容相加
结果赋给h
最后
key=key+1
[解决办法]
*号的优先级是高于++的。
在此顺便引用《C专家编程》中的一句话,我认为是个挺好的建议:“建议在C语言中记牢两个优先级就够了:乘法和除法优先于加法和减法,在涉及其他的操作符时一律加上括号。”
当然,如果别人写代码时总是喜欢炫耀自己的记忆力或者为了省事而不加括号,你有必须读他写的代码,那么的确是很纠结的。
[解决办法]
h=(h<<4)+*key++;可以看出key是一个指针。key的所指的存储单元的内容加上h右移四位的结果赋值给h,然后key指向下一个存储单元。