Delphi 判斷乙個二進位制數中有多少個1

2021-09-05 22:10:56 字數 1620 閱讀 1536

技術交流,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年發明了摩斯電碼和有線電報。有線電報的出現,具有劃時代的意義 它讓人類獲得了一種全新的資訊傳遞方式,這種方式 看不見 摸不著 聽不到 完全不同於以往的信件 旗語 號角 烽火,這也是二進...