技術交流,dh講解
有個朋友發簡訊來求助,我想他是在筆試.哈哈.c++的,但是我們知道原理後,什麼都是一樣的.
乙個數的二進位制形式是這樣的.
10011001 那麼要判斷有多少個1的話,我們只要與
00000001與,然後迴圈右移與就可以了.
比如第一次:
10011001 and 00000001 =1 說明這一位是1
01001100 and 00000001 =0 說明這一位不是1
再右移00100110 and 00000001 =0 這個又不是1
好的來看看delphi**:
programproject2;
uses
sysutils;
var
i, n, c: integer;
begin
c := 9999;
n := 0;
fori := 0to32- 1do
begin
ifcand1= 1then
inc( n );
c := cshr1;
end;
writeln( n );
readln( n );
end.
判斷9999裡面有多少個1,因為我們用的integer,32位有符號整數,所以我們右移32次.
大家看明白沒有?
一會兒用內嵌彙編寫乙個.
等考試完了來吧.
functionget1digital(n:integer):integer ;
asm
//迴圈的次數
mov ecx,32
//儲存1個個數
xoredx,edx
push ebx
@@nloop:
//儲存eax的值
mov ebx,eax
//讓eax和1 進行與運算
andeax,1
//如果eax是0 就跳了
jz @@nd
//加1
inc edx
@@nd:
mov eax,ebx
//右移一位
shreax,1
//迴圈次數減一
dec ecx
//迴圈
jnz @@nloop
pop ebx
//返回結果
mov eax,edx
end;
//彙編還是很簡單.好久沒有寫delphi這方面的**了.
貌似沒有考慮有符號整數.哈哈.罪過.
好的,我是dh.
判斷乙個二進位制數的正負
計算機中,用二進位制 或者簡寫成十六進製制 表示數,高位為0的數為正數,高位為1的數是負數。例如,int a 0xf48904e,int b 0xf48904e0,long c 0xf80000000l,long d 0xf800000000000000l.其中,a和c是正數,b和d是負數 通過編寫...
判斷二進位製半整數(二進位制)
10年後,tokitsukaze大佬已經變成了年收入超百萬的的精英程式設計師,家裡沒錢也沒礦的teitoku,找tokitsukaze大佬借1000塊錢,然後tokitsukaze大佬說,借你1024吧,湊個整數。沒錯在2進製下1024是 二進位制整數 乙個正整數滿足其值為2的k次方 k為正整數 我...
二進位制 二進位制起源
現代通訊技術的基礎是二進位制編碼。早在1865年麥克斯韋總結出麥克斯韋方程組之前,美國人摩斯 morse 於1837年發明了摩斯電碼和有線電報。有線電報的出現,具有劃時代的意義 它讓人類獲得了一種全新的資訊傳遞方式,這種方式 看不見 摸不著 聽不到 完全不同於以往的信件 旗語 號角 烽火,這也是二進...