微機(jī)原理分支程序設(shè)計(jì)步驟 統(tǒng)計(jì)二進(jìn)制數(shù)中的1的個(gè)數(shù)?
統(tǒng)計(jì)二進(jìn)制數(shù)中的1的個(gè)數(shù)?計(jì)算機(jī)中的數(shù)字是二進(jìn)制存儲(chǔ)的,所以計(jì)算過(guò)程也是二進(jìn)制計(jì)算。利用某些位運(yùn)算的特點(diǎn),很容易計(jì)算出1的個(gè)數(shù)。有一個(gè)非常有趣的特性:對(duì)于任何二進(jìn)制數(shù),例如n=10001100,我們將
統(tǒng)計(jì)二進(jìn)制數(shù)中的1的個(gè)數(shù)?
計(jì)算機(jī)中的數(shù)字是二進(jìn)制存儲(chǔ)的,所以計(jì)算過(guò)程也是二進(jìn)制計(jì)算。利用某些位運(yùn)算的特點(diǎn),很容易計(jì)算出1的個(gè)數(shù)。有一個(gè)非常有趣的特性:對(duì)于任何二進(jìn)制數(shù),例如n=10001100,我們將其減去1:n-1=10001011。再放觀察:10001100(n)10001011(n-1)通過(guò)觀察,n中1的最低位置是第三位,而n-1和n的下三位都不同。如果執(zhí)行“按位與”運(yùn)算,即n&(n-1)=1000。10001100(n)10001011(n-1)10001000(n&(n-1))您可以看到所有三位都變?yōu)?。如果你的數(shù)學(xué)足夠好,你可以得出結(jié)論:[結(jié)論]要去掉整數(shù)n中的最小1,你可以使用n=n&(n-1)。如果你不相信,你可以嘗試更多的數(shù)字或再考慮一下。利用這個(gè)結(jié)論,很容易問(wèn)二進(jìn)制中有多少個(gè)1:int countbits(int n){int count=0 while(n!=0){n=n&(n-1)計(jì)數(shù)}返回計(jì)數(shù)}