一个字符串以一个空字节结尾。由于int大于char,因此int如何变为0并始终终止循环?
源:http://www.cse.yorku.ca/~oz/hash.html
unsigned long
hash(unsigned char *str)
{
unsigned long hash = 5381;
int c;
while (c = *str++)
hash = ((hash << 5) + hash) + c; /* hash * 33 + c */
return hash;
}
答案 0 :(得分:3)
从较小类型加载整数不会保留较小类型没有的位;它们将被清除(或对于带符号的类型,通过符号扩展名设置)。
所以:
int x = 0xfeefd00d;
x = (char) 1;
将1
的值x
保留为0xfeedf001
,不 + CustomIDs +
。
答案 1 :(得分:1)
当一个表达式中的变量与不同类型的变量一起使用时(例如循环条件中的赋值),将生成implicit conversion。转换仅在类型之间进行转换,但如果可能,保留该值。
因此,当您在str
中到达空终止符时,它会(实际上是promoted)转换为int
,并保持值0
。并且0
始终为“ false”,从而结束循环。