所以我有一個靜態散列表,並且在表中添加代碼之前,索引正在與0異或。爲什麼如果表的索引已經被聲明爲整數?與0異或的目的是什麼?
h = 0;
h ^= (i << LZW_HASH_SHIFT);
if (h >= LZW_HASH_SIZE)
{
h -= LZW_HASH_SIZE;
}
s->tab[h].code = i;
s->tab[h].suffix = i;
s->tab[h].hash_prefix = LZW_PREFIX_EMPTY;
此源代碼是FFmpeg LZW編碼器庫的一部分。
我找不到這個代碼,我希望看到它周圍的環境。我能看到的最接近的是[here](https://github.com/uwehermann/easybox-904-lte-firmware/blob/master/package/ffmpeg/src/libavcodec/lzwenc.c#L173),但它不會不符合你的代碼。 – Amadan
沒錯,就是這樣。我只是將源代碼從'hash'函數複製到'clearTable()',因爲編譯器沒有正確內聯。 –
基本上,'hash'函數執行XOR操作,但是當您清除表並使用默認值填充時,零將作爲'head'參數傳遞給'hash'函數。 –