• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

技术交流,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人参与评论

请发表评论

全部评论

专题导读
上一篇:
[转]【Delphi】Thread.Queue与Synchronize的区别发布时间:2022-07-18
下一篇:
Delphi和C++Builder2014年及以后技术路线图发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap