为什么80%的码农都做不了架构师?>>>   

一个字节有 8 个位, 这些位可能是 0 也可能是 1; 现在要算出一个字节中是 1 的位共有多少个.

第一种方法是一个函数;
第二种方法笨了点, 是先把 256 种可能值给一个数组, 随时调取.

第一种方法虽然灵巧, 但不如第二种方法快(作者书中说: 在非特殊情况下, 一般要快到 10 倍左右);
第二种方法虽然快捷, 并且使用方便, 但要以 256 个字节的数组空间为代价.


unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls;typeTForm1 = class(TForm)Button1: TButton;procedure Button1Click(Sender: TObject);end;varForm1: TForm1;implementation{$R *.dfm}{方法1: 获取函数}
function GetByteBits(x: Byte): Byte;
beginResult := 0;while x <> 0 dobeginif Odd(x) then Inc(Result);x := x shr 1;end;
end;{方法2: 把所有可能的值放在一个常数数组}
constBitArr: array[0..MAXBYTE] of Byte = (0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,4,5,5,6,5,6,6,7,5,6,6,7,6,7,7,8);{测试}
procedure TForm1.Button1Click(Sender: TObject);
varb,num: Byte;
beginb := 255;num := GetByteBits(b);      {使用函数获取}ShowMessage(IntToStr(num)); {8}num := BitArr[b];           {直接使用数组获取}ShowMessage(IntToStr(num)); {8}b := 254;num := GetByteBits(b);      {使用函数获取}ShowMessage(IntToStr(num)); {7}num := BitArr[b];           {直接使用数组获取}ShowMessage(IntToStr(num)); {7}
end;end.

那个小函数, 琢磨了半天才明白(惭愧); 以后判断其他数也没问题了, 譬如判断 Integer:


function GetIntBits(x: Integer): Byte;
beginResult := 0;while x <> 0 dobeginif Odd(x) then Inc(Result);x := x shr 1;end;
end;

转载于:https://my.oschina.net/hermer/blog/320254

《Delphi 算法与数据结构》学习与感悟[3]: 获取一个字节中非空位的个数相关推荐

  1. 算法与数据结构学习路线

    随着科学技术的发展,人工智能已经逐渐渗透到各个行业,这是一个相当有前景的专业领域. 其中,算法工程师这一职位更是非常火爆,在急缺大量人才的同时,也吸引了众多求职者,那么,初学者该如何学好算法呢? 算法 ...

  2. 算法与数据结构学习资料及面试

    from 算法之美作者:  http://blog.csdn.net/tiandijun/article/details/50550056 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录( ...

  3. 【算法和数据结构学习笔记】整合版

    文章目录 算法 前缀和 双指针法 四数之和 分治算法 Offer 58 II 左旋转字符串 回溯算法 动态规划 数据结构 数组 & String & 双指针 字符串 反转字符串 T54 ...

  4. 谈谈算法(数据结构学习笔记)

    文章目录 什么是算法 算法举例 高斯简算1到100加法 算法的五个基本特征 算法设计的要求 什么是算法 算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作 ...

  5. 【C++算法与数据结构学习笔记------用循环数组实现队列】

    照王晓东<数据结构>(C++语言版)上打的,以备留用. 1 #include <iostream> 2 using namespace std; 3 template<t ...

  6. 尚硅谷算法与数据结构学习笔记05 -- 递归

    1.递归介绍 1.1.递归应用场景 看个实际应用场景, 迷宫问题(回溯), 递归(Recursion) 1.2.递归的概念 简单的说: 递归就是方法自己调用自己,每次调用时传入不同的变量,递归有助于编 ...

  7. 算法与数据结构学习(46)-B树、B+树和B*树

    B树的介绍 B-tree树即B树,B即Balanced,平衡的意思.有人把B-tree翻译成B-树,容易让人产生误解.会以为B-树是一种树,而B树又是另一种树.实际上,B-tree就是指的B树. 前面 ...

  8. 算法与数据结构学习(6)-链表(2)

    前言 之前的一个文章我们学习了单向链表的关内容,并且用单向链表的方式实现了水浒英雄的管理.但是这个示例还存在一定的问题. 1.单向链表是死的,也就是说单向链表的存储和显示的顺序都是按照数据的输入顺序决 ...

  9. 算法与数据结构学习(58)-程序员常用10种算法(佛洛依德算法)

    弗洛伊德(Floyd)算法介绍 和Dijkstra算法一样,弗洛伊德(Floyd)算法也是一种用于寻找给定的加权图中顶点间最短路径的算法.该算法名称以创始人之一.1978年图灵奖获得者.斯坦福大学计算 ...

最新文章

  1. 非科班的我如何自学Python在一线城市找到一份15k的offer的?
  2. python对笔记本电脑的要求-Python的用法笔记本
  3. xml签名和普通数字签名
  4. Installshield 2010 中集成. Net framework4 与 vc++ 2010运行安装包
  5. 贵广网络跨界转型 实现智慧城市的平台创新
  6. #region的快捷键+++从一个页面中弹出一个新窗口,当新窗口关闭时刷新原窗口!...
  7. “头腾大战”烧至在线办公:微信封禁飞书做错了吗?
  8. 图解TCP/IP第一章学习
  9. switch开关 ~ 学习记录
  10. python中run函数作用_python3多线程中如何改写run()函数?
  11. C++模板Trait
  12. 微信小程序底部突起半圆设计
  13. JAVA基础编程50道练习题
  14. Unity3d 代码修改并恢复鼠标的图标
  15. 在windows上安装 chocolatey.1.1.0.nupkg
  16. 批处理常用DOS命令简述
  17. 操作系统 进程通信方式
  18. Unity 2D Animation(2D动画)学习
  19. promise Eslint sql传参方式 async-await
  20. TI单芯片毫米波雷达1642代码走读(〇)——总纲

热门文章

  1. GO语言教程1:Windows环境下GO语言的安装与配置
  2. java open_java-OpenIMAJ Jar文件
  3. ssh中c3p0连接mysql_JSP+SSH+Mysql+C3P0实现的传智播客网上商城
  4. mysql 定义class_MySQL数据库类的定义
  5. 手机php环境的openss_php开启openssl的方法
  6. Docker创建Nexus
  7. java开发用amd处理器_HBase1.x实战:协处理器Java开发实例--ObserverCoprocessor
  8. 网件r4500刷第三方固件_网件R6800刷PandoraBox固件,激发潜在的160MHz频宽
  9. iOS9 This application is modifying the autolayout engine from a background thread, which
  10. ansible自动化运维(二)——环境部署及常用模块的使用