Delphi - 判断一个二进制数中有多少个1

技术交流,DH讲解

有个朋友发短信来求助,我想他是在笔试.哈哈.C++的,但是我们知道原理后,什么都是一样的.


一个数的二进制形式是这样的.
10011001 那么要判断有多少个1的话,我们只要与
00000001与,然后循环右移与就可以了.
比如第一次:
10011001 and 00000001 =1 说明这一位是1
01001100 and 00000001 =0 说明这一位不是1
再右移
00100110 and 00000001 =0 这个又不是1
好的来看看Delphi代码:
Program Project2;
{$APPTYPE CONSOLE}
Uses
SysUtils;
Var
I, N, C: Integer;
Begin
{ TODO -oUser -cConsole Main : Insert code here }
C := 9999;
N := 0;
For i := 0 To 32- 1 Do
Begin
If C And 1= 1 Then
Inc( N );
C := C Shr 1;
End;
writeln( N );
Readln( N );
End.
判断9999里面有多少个1,因为我们用的integer,32位有符号整数,所以我们右移32次.
大家看明白没有?
一会儿用内嵌汇编写一个.
等考试完了来吧.
function Get1Digital(n:Integer):Integer ;
asm
//循环的次数
mov ecx,32
//保存1个个数
xor edx,edx
push ebx
@@nLoop:
//保存eax的值
mov ebx,eax
//让eax和1 进行与运算
and eax,1
//如果eax是0 就跳了
jz @@nD
//加1
inc edx
@@nD:
mov eax,ebx
//右移一位
shr eax,1
//循环次数减一
dec ecx
//循环
jnz @@nLoop
pop ebx
//返回结果
mov eax,edx
end;
//汇编还是很简单.好久没有写Delphi这方面的代码了.

貌似没有考虑有符号整数.哈哈.罪过.

好的,我是DH.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值