Mediumbit-manipulation
Sum of Two Integers
Problem (yeniden ifade)
a+b’yi + veya - operatörleri kullanmadan döndür.
Sezgi
a^b taşımasız toplamdır; (a&b)<<1 taşıma. Taşıma 0 olana dek yinele.
Yaklaşımlar
XOR + carry döngüsü
DoğrulanmadıZaman O(1) 32-bitAlan O(1)
Fikir. Bitler üzerinde full-adder simülasyonu. Python negatifler için 32-bit mask ister.
Yürüyüş. 1+2 → 3; -1+1 → 0.
Trade-off. Üretimde yerleşik + yeter; problem bir bit-op alıştırması.
Çözüm
export function getSum(a: number, b: number): number {
while (b !== 0) {
const carry = (a & b) << 1;
a = a ^ b;
b = carry;
}
// JS bitwise is 32-bit signed already for |0
return a | 0;
}
export function getSum(a: number, b: number): number {
while (b !== 0) {
const carry = (a & b) << 1;
a = a ^ b;
b = carry;
}
// JS bitwise is 32-bit signed already for |0
return a | 0;
}
Şablon bağlantısı
Bitsel aritmetik simülasyonu.
Yansıma
- XOR bitsiz toplam,
ANDsola 1 elde. Elde 0 olunca dur. - Negatif iki’nin tümleyeni. Python’da eldeyi 32 bite kesmezsen döngü uzar.
a + 0a.(-1) + 10. Taşmaintsınırında eldeyi maskeler.