tarafından merak ettim Ben 32 bit kullanarak bir yaklaşım yapma dahil bazı çözüm gördüğü için bir 8-bit genişliğinde kayıt çalışacak bir çözüm. Sınırlı aralığı (sadece 10 olası sonuçları vardır), ikili arama bir tür daha iyi yapabilir VerilenBit bölümü 10
0
A
cevap
1
: n < 50 n'nin < 30 n'nin < 10 sonra 0 dönerseniz eğer else if n < 20 geri 1 başka bir geri dönüş 2 başka n dönüşü 3 nolu geri dönüş 4 başka ... (işlem 5.9)
0
here belirtilen yöntem, herhangi bir bit genişliği için genelleştirilebilir. Temelde, (1/10) bulmak * 2 ** (bit genişliği) sonra biraz genişliği ile bölen ve sağ kayması ile çarpın. Programlı javascript kullanarak
şudur ki:
function bitwiseDivApprox(dividend) {
var divisor = 26; // Math.ceil((1/10) * Math.pow(2, 8))
return (divisor * dividend) >> 8;
}
10 tarafından [Divide
Olası yinelenen (bu muhtemelen çok küçük sayılar için bu optimize etmek denemek için değmez, söyleniyor) bit vardiya kullanarak?] (http://stackoverflow.com/questions/5558492/divide-by-10-using-bit-shifts) – Ashigore
dikkatle ben bir 8 bit genişliğinde kayıt ile çalışıyorum söylüyorum soruyu okursanız . Bu sorunun cevabı bir sayıyı 32'ye kaydırmayı içerir. – Pure