মতে দাবা BitScan পৃষ্ঠা প্রোগ্রামিং এবং আমার নিজস্ব পরিমাপ, বিয়োগ এবং XOR অস্বীকার তুলনায় দ্রুততর এবং মাস্ক হয়।
(আপনি যদি অনুমানযোগ্য শূন্যগুলি গণনা করতে যাচ্ছেন তার চেয়ে নোট করুন 0, যে পদ্ধতিটি আমার কাছে রয়েছে তেমন ফিরে আসে 63এবং উপেক্ষা এবং মুখোশ ফিরে আসে0 ))
এখানে একটি -৪-বিট বিয়োগ এবং জোর:
unsigned long v; // find the number of trailing zeros in 64-bit v
int r; // result goes here
static const int MultiplyDeBruijnBitPosition[64] =
{
0, 47, 1, 56, 48, 27, 2, 60, 57, 49, 41, 37, 28, 16, 3, 61,
54, 58, 35, 52, 50, 42, 21, 44, 38, 32, 29, 23, 17, 11, 4, 62,
46, 55, 26, 59, 40, 36, 15, 53, 34, 51, 20, 43, 31, 22, 10, 45,
25, 39, 14, 33, 19, 30, 9, 24, 13, 18, 8, 12, 7, 6, 5, 63
};
r = MultiplyDeBruijnBitPosition[((uint32_t)((v ^ (v-1)) * 0x03F79D71B4CB0A89U)) >> 58];
রেফারেন্সের জন্য, এখানে প্রত্যাখ্যান এবং মুখোশ পদ্ধতির একটি 64-বিট সংস্করণ রয়েছে:
unsigned long v; // find the number of trailing zeros in 64-bit v
int r; // result goes here
static const int MultiplyDeBruijnBitPosition[64] =
{
0, 1, 48, 2, 57, 49, 28, 3, 61, 58, 50, 42, 38, 29, 17, 4,
62, 55, 59, 36, 53, 51, 43, 22, 45, 39, 33, 30, 24, 18, 12, 5,
63, 47, 56, 27, 60, 41, 37, 16, 54, 35, 52, 21, 44, 32, 23, 11,
46, 26, 40, 15, 34, 20, 31, 10, 25, 14, 19, 9, 13, 8, 7, 6
};
r = MultiplyDeBruijnBitPosition[((uint32_t)((v & -v) * 0x03F79D71B4CB0A89U)) >> 58];