《Delphi 算法与数据结构》学习与感悟[3]: 获取一个字节中非空位的个数
为什么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]: 获取一个字节中非空位的个数相关推荐
- 算法与数据结构学习路线
随着科学技术的发展,人工智能已经逐渐渗透到各个行业,这是一个相当有前景的专业领域. 其中,算法工程师这一职位更是非常火爆,在急缺大量人才的同时,也吸引了众多求职者,那么,初学者该如何学好算法呢? 算法 ...
- 算法与数据结构学习资料及面试
from 算法之美作者: http://blog.csdn.net/tiandijun/article/details/50550056 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录( ...
- 【算法和数据结构学习笔记】整合版
文章目录 算法 前缀和 双指针法 四数之和 分治算法 Offer 58 II 左旋转字符串 回溯算法 动态规划 数据结构 数组 & String & 双指针 字符串 反转字符串 T54 ...
- 谈谈算法(数据结构学习笔记)
文章目录 什么是算法 算法举例 高斯简算1到100加法 算法的五个基本特征 算法设计的要求 什么是算法 算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作 ...
- 【C++算法与数据结构学习笔记------用循环数组实现队列】
照王晓东<数据结构>(C++语言版)上打的,以备留用. 1 #include <iostream> 2 using namespace std; 3 template<t ...
- 尚硅谷算法与数据结构学习笔记05 -- 递归
1.递归介绍 1.1.递归应用场景 看个实际应用场景, 迷宫问题(回溯), 递归(Recursion) 1.2.递归的概念 简单的说: 递归就是方法自己调用自己,每次调用时传入不同的变量,递归有助于编 ...
- 算法与数据结构学习(46)-B树、B+树和B*树
B树的介绍 B-tree树即B树,B即Balanced,平衡的意思.有人把B-tree翻译成B-树,容易让人产生误解.会以为B-树是一种树,而B树又是另一种树.实际上,B-tree就是指的B树. 前面 ...
- 算法与数据结构学习(6)-链表(2)
前言 之前的一个文章我们学习了单向链表的关内容,并且用单向链表的方式实现了水浒英雄的管理.但是这个示例还存在一定的问题. 1.单向链表是死的,也就是说单向链表的存储和显示的顺序都是按照数据的输入顺序决 ...
- 算法与数据结构学习(58)-程序员常用10种算法(佛洛依德算法)
弗洛伊德(Floyd)算法介绍 和Dijkstra算法一样,弗洛伊德(Floyd)算法也是一种用于寻找给定的加权图中顶点间最短路径的算法.该算法名称以创始人之一.1978年图灵奖获得者.斯坦福大学计算 ...
最新文章
- 非科班的我如何自学Python在一线城市找到一份15k的offer的?
- python对笔记本电脑的要求-Python的用法笔记本
- xml签名和普通数字签名
- Installshield 2010 中集成. Net framework4 与 vc++ 2010运行安装包
- 贵广网络跨界转型 实现智慧城市的平台创新
- #region的快捷键+++从一个页面中弹出一个新窗口,当新窗口关闭时刷新原窗口!...
- “头腾大战”烧至在线办公:微信封禁飞书做错了吗?
- 图解TCP/IP第一章学习
- switch开关 ~ 学习记录
- python中run函数作用_python3多线程中如何改写run()函数?
- C++模板Trait
- 微信小程序底部突起半圆设计
- JAVA基础编程50道练习题
- Unity3d 代码修改并恢复鼠标的图标
- 在windows上安装 chocolatey.1.1.0.nupkg
- 批处理常用DOS命令简述
- 操作系统 进程通信方式
- Unity 2D Animation(2D动画)学习
- promise Eslint sql传参方式 async-await
- TI单芯片毫米波雷达1642代码走读(〇)——总纲
热门文章
- GO语言教程1:Windows环境下GO语言的安装与配置
- java open_java-OpenIMAJ Jar文件
- ssh中c3p0连接mysql_JSP+SSH+Mysql+C3P0实现的传智播客网上商城
- mysql 定义class_MySQL数据库类的定义
- 手机php环境的openss_php开启openssl的方法
- Docker创建Nexus
- java开发用amd处理器_HBase1.x实战:协处理器Java开发实例--ObserverCoprocessor
- 网件r4500刷第三方固件_网件R6800刷PandoraBox固件,激发潜在的160MHz频宽
- iOS9 This application is modifying the autolayout engine from a background thread, which
- ansible自动化运维(二)——环境部署及常用模块的使用