x^y
x XOR y
, sonuç bit x 1 sahiptir, ve y farklıdır ve 0 bit için de aynıdır: yani
x = 01010011
y = 00010011
x^y = 01000000
^(x^y) Bu reddeder, Eğer aksi takdirde farklı bitlerin için 0 ve 1 olsun:
^(x^y) = 10111111 => z
Sonra kendisi tarafından kendi bitlerini maskeleme için sağa z yerini değiştirecek. Bir vites değiştirme sıfır bit sayısı sol tarafını doldurur: sonuca
z
herhangi bir sıfır yayılan hedefi ile
z >> 4 = 00001011
, ANDing başlangıç:
z = 10111111
z >> 4 = 00001011
z & (z >> 4) = 00001011
da taşımak için yeni bir değer kat
z = 00001011
z >> 2 = 00000010
z & (z >> 2) = 00000010
ayrıca son bit kat:
sağ ve sıfır Başlangıçta
x == y
varsa Öte yandan , bu böyle gider:
z = 11111111
z (& z >> 4) = 00001111
z (& z >> 2) = 00000011
z (& z >> 1) = 00000001
Yani aslında aksi durumlarda 1 x == y
0 döndürür
.
Genellikle, x ve y'nin ikisi sıfırsa, karşılaştırma diğer durumlardan daha az zaman alabilir. Bu işlev, tüm çağrıların, girişlerinin değerlerine bakılmaksızın aynı zamana sahip olmasını sağlamaya çalışır. Bu şekilde, bir saldırgan zamanlama tabanlı saldırıları kullanamaz.