在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
技术交流,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. |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论