二进制代码

算法:计算十进制数字在二进制表示1的个数

天涯浪子 提交于 2020-01-21 01:18:13
题目一 计算十进制数字在二进制表示 1 的个数 举个例子: 十进制数字为 1 时,它的二进制表示是 001,二进制表示 1 的个数为 1; 十进制数字为 2 时,它的二进制表示是 010,二进制表示 1 的个数为 1; 十进制数字为 3 时,它的二进制表示是 011,二进制表示 1 的个数为 2; 十进制数字为 4 时,它的二进制表示是 100,二进制表示 1 的个数为 1; 十进制数字为 5 时,它的二进制表示是 101,二进制表示 1 的个数为 2; 十进制数字为 6 时,它的二进制表示是 110,二进制表示 1 的个数为 2; 十进制数字为 7 时,它的二进制表示是 111,二进制表示 1 的个数为 3; 时间复杂度 O(logn) 的解法 对于这个题目比较容易想到的是如下代码: int count = 0; while(n != 0) { if(n % 2 == 1) { count++; } n = n >> 1; } 上述代码主要做了两个步骤: n % 2 表示对数字求模运算,也就是计算 二进制的末尾 是 1 还是 0,如果二进制的末尾是 1 ,则 count 自增,count 表示的是二进制表示 1 的个数; n = n >> 1 表示把二进制 往右移走一位 ,比如十进制数字 7 的二进制表示是 111 ,那么通过右移一位后,则变成 011。

Redis修行 — 位图实战

有些话、适合烂在心里 提交于 2020-01-18 01:33:16
学 无 止 境 , 与 君 共 勉 。 介绍 按照官网的说法,Redis位图Bitmaps不是实际的数据类型,而是在字符串类型上定义的一组 面向位的操作 。在Redis中字符串限制最大为 512MB ,所以位图中最大可以设置 2^32 个不同的位( 42.9亿个 )。图位的最小单位是比特(bit),每个bit的值只能是0或1。 位图的存储大小计算: (maxOffset / 8 / 1024 / 1024)MB。其中maxOffset为位图的最大位数 基本用法 SETBIT key offset value 设置指定key的值在offset处的bit值,offset从0开始。返回值为在offset处原来的bit值 # 通过位操作将 h 改成 i 127.0.0.1:6379> SET h h # 二进制为 01101000 OK 127.0.0.1:6379> SETBIT h 7 1 # 将最后一位改成1 => 01101001 (integer) 0 127.0.0.1:6379> GET h "i" GETBIT key offset 获取指定key的值在offset处的bit值,offset从0开始。如果offset超出了当前位图的范围,则返回0。 127.0.0.1:6379> set i i # 二进制为 01101001 OK 127.0.0.1:6379>

快速幂算法

ⅰ亾dé卋堺 提交于 2020-01-17 13:59:33
大数模幂运算的缺陷: 快速幂取模算法的引入是从大数的小数取模的朴素算法的局限性所提出的,在朴素的方法中我们计算一个数比如5 1003 %33是非常消耗我们的计算资源的,在整个计算过程中最麻烦的就是我们的5 1003 这个过程 **缺点1:**在我们之后计算指数的过程中,计算的数字不断增大,非常的占用我们的计算资源(主要是时间,其次是空间)。 **缺点2:**我们计算的中间过程数字过于大,现有的计算机是没有办法记录这么长的数据的。 朴素算法: 如上所述,在要求算出一个数字的n次幂时,我们最容易想到的便是循环累乘: int normalPower ( int base , int exponent ) { while ( exponent > 0 ) { base * = base ; -- exponent ; } return base ; } 这种方法的时间复杂度为O(N); 快速幂算法 根据二进制的性质以及编程语言中方便的 与运算符&和 移位运算符>>,有人提出了快速幂的算法,其时间复杂度为O(logN)。 1.快速幂思想 计算 a b 这样一个数,我们指数b以转换二进制的形式进行分解,将其写成二进制中每一位乘上该位的权重(从右往左,第i位的权为2i-1)。 例如:a 13 =a 2 ^ 0+2 ^ 2+2 ^ 3 =a 2 ^ 0 a 2 ^ 2 a 2 ^ 3 2

chpater 3-顺序结构的程序设计

陌路散爱 提交于 2020-01-14 07:54:11
文章目录 3.1进制与ASCALL码 3.1.1 二进制 八进制 十进制 十六进制 3.1.2 进制之间转化(手动计算) 3.1.3 ASCALL 码 3.2 常量与变量 3.2.1 常量 3.2.2 变量 3.2.3 常变量 3.2.4 标识符 3.3 数据类型 3.3.1 整数型 3.3.2字符型 3.3.3浮点型 3.4 数据类型的转换 3.5 运算符 3.6 c语言表达式处理的过程 3.7语句 3.7.1 赋值语句 3.7.2 printf输出函数 3.7.3 scanf输入函数 3.7.4 putchar 与getchar 函数 3.8例题 3.1进制与ASCALL码 3.1.1 二进制 八进制 十进制 十六进制 二进制 :逢二近一;只有01 两个基数 八进制 :逢八进一 ;只有01234567 八个基数 十进制 :逢十进一;0123456789 是个基数 十六进制 :逢十六进一;0123456789ABCDEF十五个基数 ; 咱们生活里面用到的就是数值比如:68 ,4490, 324 都是十进制;只是我们没注意罢了; 在代码的世界里面,不能说 010 ,要说(多少)进制 010. 因为 010 ,可以是二进制,八进制,十进制,也可以使十六进制。 for example : 二进制 010 , 二进制 110 八进制 767 十进制 99 十六进制AB2 3.1.2

Delphi 文件类型

夙愿已清 提交于 2020-01-13 15:02:35
该内容整理自以下链接 http://www.cnblogs.com/chenyunpeng/archive/2012/08/02/2620513.html 1.DPR: Delphi Project文件,系统的工程文件。文本格式,需要进源代码库。 2.PAS: Pascal文件,Pascal单元的源代码,可以是与窗体有关的单元或是独立的单元。 3.DFM: Delphi Form File,描述窗体或数据模块及其组件属性的二进制文件。窗体界面文件, 同PAS文件同名,而且一一对应, 定义了窗体属性和构件的属性。 4.BPG: Borland Project Group, 工程项目包, 多个工程文件(DPR)的集合。文本格式,需要进源代码库;bpg文件其实是makefile格式,要编译bpg文件可以使用make工具,语法如下:make -f %FileName% 5.DOF: Delphi Option File, 选项文件, 包括编译信息等。 6.CFG: Project Configuration File, 编译器可读的配置文件。 7.DSK: Desktop Setting File, 保存工程文件的桌面摆布情况, 下次打开时可以恢复上次保存的桌面状态。文本格式,此文件不应进源代码库。 8.DSM:集成开发环境IDE的临时保存文件, 有时IDE总出错, 可以将这个文件删掉,

快速幂运算详解加解析(新人秒懂)

家住魔仙堡 提交于 2020-01-13 09:53:00
快速幂运算 普通的幂运算,例如2的10次方,是按照2乘2乘2.........一直到乘以十个二,如果指数比较小,那么时间还算小,如果遇到特别大的数,时间就会显得非常巨大,所以在此介绍快速幂的方法(方法有很多,在此只介绍易懂的); 在介绍这种快幂的方法之前,需要简单介绍几个小知识点; 二进制运算符 1. (&) 用于取位操作,例如( x&1 )的结果是将十进制数(x)转换成二进制数之后再取最后一位 如果x=11,转成二进制后等于1011 ,再取最后一位是1。 2. (>>=) (右移运算符) int a = 11; a>>=1; 运行 : a = 5; 解析:将11转换成了二进制1101,将1101右移了一位变成0101,而二进制0101在 十进制中表示5 所以输出等于5 3.幂运算知识 代码实现: public class Main2 {//动态规划 public static void main(String[] args) { Scanner sc = new Scanner(System.in); int a = sc.nextInt(); int b = sc.nextInt(); System.out.println(mi(a,b)); } public static int mi(int a ,int b) { int ans = 1; int base = a; if

ASCII,Unicode,UTF-8 和 GBK

烂漫一生 提交于 2020-01-13 05:00:12
转自 http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html 。 如果我也有想阮一峰一样的探究总结能力,一定会变得越来越好。 简单来说, Unicode 是最全的编码方式,囊括世界上所有的符号。 UTF-8 是 Unicode 的实现方式之一,它主要采用了变长存储的方式解决了Unicode 存储空间过大问题。 ASCII 码一共规定了128个字符,对于英文表示是完全足够了。UTF-8表示单字符时和ASCII码是一致的,也就是说,对于128个ASCII码对应的字符,其使用UTF-8编码方式和ASCII码完全一致。 GBK 是汉字编码的一种方式,与Unicode 和 UTF-8 是毫无关系的,但都是一种对字符的编码方式。 正文: 一、 ASCII 码 我们知道,计算机内部,所有信息最终都是一个二进制值。每一个二进制位(bit)有 0 和 1 两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个符号,从 00000000 到 11111111 。 上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定。这被称为 ASCII 码,一直沿用至今。 ASCII

包管理工具比较

旧街凉风 提交于 2020-01-12 11:05:48
目录 包管理工具比较 Ref 包管理工具比较 vcpkg Conan: 把二进制按(包名,平台,版本,编译选项)这样的方式,在服务器上传并索引,使用时各取所需 Bazel: 源码管理就得相当简单,只有代码了。那二进制怎么办?把它缓存起来 hunter nuget Ref https://www.zhihu.com/question/263416411 https://github.com/microsoft/vcpkg 来源: https://www.cnblogs.com/cutepig/p/12182079.html

c#字符串编码问题

折月煮酒 提交于 2020-01-12 10:24:34
来自森大科技官方博客 http://www.cnsendblog.com/index.php/?p=272 GPS平台、网站建设、软件开发、系统运维,找森大网络科技! http://cnsendnet.taobao.com c#字符串编码问题 一、 ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个符号,从00000000到11111111。 上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定。这被称为ASCII码,一直沿用至今。ASCII码一共规定了128个字符的编码,比如空格“SPACE”是32(二进制00100000),大写的字母A是65(二进制01000001)。这128个符号(包括32个不能打印出来的控制符号),只占用了一个字节的后面7位,最前面的1位统一规定为0。 在C#中如果你想看看某个字母的ASCII码是多少,可以使用表示字符编码的类Encoding ,代码如下: string s = "a"; byte[] ascii = Encoding.ASCII.GetBytes(s);

c#字符串编码问题

↘锁芯ラ 提交于 2020-01-12 10:20:14
来自森大科技官方博客 http://www.cnsendblog.com/index.php/?p=272 GPS平台、网站建设、软件开发、系统运维,找森大网络科技! http://cnsendnet.taobao.com c#字符串编码问题 一、 ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个符号,从00000000到11111111。 上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定。这被称为ASCII码,一直沿用至今。ASCII码一共规定了128个字符的编码,比如空格“SPACE”是32(二进制00100000),大写的字母A是65(二进制01000001)。这128个符号(包括32个不能打印出来的控制符号),只占用了一个字节的后面7位,最前面的1位统一规定为0。 在C#中如果你想看看某个字母的ASCII码是多少,可以使用表示字符编码的类Encoding ,代码如下: string s = "a"; byte[] ascii = Encoding.ASCII.GetBytes(s);