設現有正整數150,二進位制形式為10010110,現有如下題目,求其盡可能簡單的解法。
題目一:判斷該正整數是否是2的乘方;
解法:
由上表可以看出2的乘方的二進位制形式只有乙個bit為1,因此判斷乙個正整數a是否為2的乘方,可以判斷a&(a-1)是否等於0,若結果為0,則是2的乘方,若不為0則不是2的乘方。
題目二:判斷正整數是否能被4整除;
解法:
乙個正整數可以將其表示為a=m*8+n;m是a的高位bit組成的數字,n是低三位bit組成的數字,例150=(10010)18*8+6;因為m*8是能被4整除的,因此只需判斷n能否被4整除即可,從上式可以看出150的n值不能被4整除,所以該正整數不能被4整除。
題目三:不用乘法器求該正整數*3的結果;
解法:根據上表乙個正整數a*2的結果為將該正整數的二進位制左移乙個bit位,並低位補0。因此求乙個正整數*3的結果根據乘法的基本定律得到:a*3=a*(2+1)=a*2+a,而a*2可以轉換為左移補0的動作,因此a*3可以轉換為不用乘法器的運算。
題目4:求乙個未知整數除以7的餘數,該整數的範圍為0-255,要求不使用除法器;
解法:該整數的最大可能值為255,因此該整數的二進位制形式可以用8個bit位表示x7x6x5x4x3x2x1x0;根據題目二的思想,可以將該整數表示為a=x7*128+x6*64+x5*32+x4*16+x3*8+x2*4+x1*2+x0;
a/7=(x7*128+x6*64+x5*32+x4*16+x3*8+x2*4+x1*2+x0)/7;
a/7=x7*(128/7)+x6*(64/7)+x5*(32/7)+x4*(16/7)+x3*(8/7)+(x2*4+x1*2+x0)/7;
根據除法的基本定律可以知道除法結果=商和餘數:
分別計算上式的元素:
根據除法的基本定律可以得出a/7:
餘p:x7*2+x6*1+x5*4+x4*2+x3*1+x2*4+x1*2+x0
=x7x6+x5x4x3+x2x1x0(p的最大值3+7+7=17)
商q:x7*18+x6*9+x5*4+x4*2+x3*1+0
=9*x7x6+x5x4x3
由上式可以看出餘數p的最大值可能為17因此餘數p還能除以7;
因此真正的餘數和商等於:
餘:p/7取餘p;商:q+p/7取商q
因為p的值為0-17是有限的值,因此可以列舉求其商和餘數:
case(p)
0:q=0;p=0;
1:q=0;p=1;
2:q=0;p=2;
17:q=2;p=3;
得到乙個0-255的未知整數除以7的最終結果:
商=q+q=9*x7x6+x5x4x3+q;餘數=p,pq可有case(p=x7x6+x5x4x3+x2x1x0)求得,因此整個運算不需要用到除法器。
二進位制 二進位制起源
現代通訊技術的基礎是二進位制編碼。早在1865年麥克斯韋總結出麥克斯韋方程組之前,美國人摩斯 morse 於1837年發明了摩斯電碼和有線電報。有線電報的出現,具有劃時代的意義 它讓人類獲得了一種全新的資訊傳遞方式,這種方式 看不見 摸不著 聽不到 完全不同於以往的信件 旗語 號角 烽火,這也是二進...
判斷二進位製半整數(二進位制)
10年後,tokitsukaze大佬已經變成了年收入超百萬的的精英程式設計師,家裡沒錢也沒礦的teitoku,找tokitsukaze大佬借1000塊錢,然後tokitsukaze大佬說,借你1024吧,湊個整數。沒錯在2進製下1024是 二進位制整數 乙個正整數滿足其值為2的k次方 k為正整數 我...
mysql二進位制 MySql二進位制連線方式詳解
使用mysql二進位制方式連線 您可以使用mysql二進位制方式進入到mysql命令提示符下來連線mysql資料庫。例項以下是從命令列中連線mysql伺服器的簡單例項 root host mysql u root p enter password 在登入成功後會出現 mysql 命令提示視窗,你可以...