二进制

D. Dr. Evil Underscores

和自甴很熟 提交于 2020-03-07 03:59:05
给出n个数a[1]~a[n],用一个数x,令x xor a[i]的最大值最小,求这个最小值。 异或这个运算是每一位都独立运行的,显然,这题和二进制有关,所以我们应该把他们拆分成二进制来观察得出规律。显然如果某一位二进制上全是相同的0或者1,x相应的位置上应该和他们相同,这样肯定可以让最后的值变小。关键是有0有1怎么处理,刚开始我是想有0有1,这一位x无论是0还是1对最后答案的贡献都是1,然后直接当1处理就好了,然后继续处理剩下的位数。 实际上这是有问题的,前半句话是对的,但是,虽然无论当前这位选择0还是1最后对答案的贡献都是当前位变成1,但是选择1还是0会导致一部分的数字后面的位数不再产生有效的贡献。举个例子: 00110 01001 01101 10111 11001 11011 如果x第一位选择0异或之后(暂时不管x后面几位)就变成 0 * * * * 0 * * * * 0 * * * * 1 * * * * 1 * * * * 1 * * * * 显然后三个一定大于前三个,无论*代表什么数,所以只有后面三个数才具备继续讨论的必要,前三个数不可能是最大值,对答案也就没有贡献了。如果第一位选择1异或那么结果刚好相反。 所以问题到这里就很清晰了,按照二进制从左往右遍历,如果全是0或者1,当前位+0继续向下一位求解,如果有0有1,按照当前位是0还是1分成两个集合,分别求解子集合

如何设计二进制文件格式

两盒软妹~` 提交于 2020-03-07 03:52:51
设计二进制文件格式 前言 1、为何需要一种二进制的文件格式 2、文件格式的具体设计 (1)整体的文件结构 (2)文件头魔数(magic number) (3)检验码 (4)版本号 (5)字节顺序 (6)字节对齐 (7)回写和流写 前言 本文是由于需要设计一种二进制的文件格式用于保存前文中所提取出来的wav文件的采样数据故而写下本篇文章。 1、为何需要一种二进制的文件格式 程序时常需要保存自身的文档数据。比如一个矢量绘图程序,需要将用户绘制的每个图元都保存到文件中,以后再次打开。应该优先考虑文本格式,文本格式容易测试和编辑。更应该优先考虑通用的文本格式,比如 XML, JSON, Lua 等等。这些通用的文本格式已经存在大量的工具和库,可以省下很多功夫。 文本格式读取慢,并且文件尺寸也比较大(就算经过 zip 压缩),大多数情况下这都不是什么问题。但一些场合,要求更快读取速度,更小文件尺寸,这时就需要自己来设计一种二进制文件格式。游戏中的模型数据,就要求读取速度快;而经常通过网络传输的文件,就要求减少文件尺寸,比如 swf 格式。 2、文件格式的具体设计 具体的二进制文件格式,要根据具体的程序需求来设计。但有些设计思路,是所有二进制格式都通用的。了解这些,对将来分析其它的二进制格式也会有帮助。 (1)整体的文件结构 常见二进制文件格式,时常采用 文件头 + 分区 的结构: file

二进制位移的略解带符号右移>>和不带符号右移>>>

谁说胖子不能爱 提交于 2020-03-07 02:12:37
移位操作: 关于数的移位,特别需要注意: 1、正数,三码(源码、反码、补码)相同,所以无论左移还是右移都是补0.(左移则表示放大2的N次方,右移表示缩小2的N次方) 2、负数的补码就需要注意,左移在右边补0,右移需要在左边补1 有一个很有趣的误区是,认为符号位保持不变,仅仅移动数据位,这是不对的,因为无论数据位还是符号位,都是二进制,在整体大迁移的过程中,符号位也是要跟随潮流的。只不过,为了保证右移后,和原来的符号数一样,因此,负数在右移时左边补 计算机表示数字正负不是用+ -加减号来表示,而是用最高位数字来表示,0表示正,1表示负 左移<<:向左移位,符号后面的数字是移了多少位,移的位用0补齐,例如2进制数01111111左移一位后变为11111110,移位是字节操作。 右移>>:向右移位,符号后面的数字是移了多少位,移的位用符号位补齐,例如01111111右移一位后变为00111111,而10000000右移一位后变成11000000,因为符号位是1。 右移 demo1 >>> -- - 右移运算符,它表示是将运算符左边的对象向右移动运算符右边指定的数, 并且在高位补 0. int a = 16 ; int b = 2 ; System . out . print ( a >>> b ) ; 结果是 : 4 >> -- - 带符号右移运算符,它表示将运算符左边的运算对象,

十进制转二进制,二进制转十进制,等

放肆的年华 提交于 2020-03-07 00:12:28
转成二进制主要有以下几种:正整数转二进制,负整数转二进制,小数转二进制; 1、 正整数转成二进制。要点一定一定要记住哈:除二取余,然后倒序排列,高位补零。 也就是说,将正的十进制数除以二,得到的商再除以二,依次类推知道商为零或一时为止,然后在旁边标出各步的余数,最后倒着写出来,高位补零就OK咧。哎呀,还是举例说明吧,比如42转换为二进制,如图1所示操作。 42除以2得到的余数分别为010101,然后咱们倒着排一下,42所对应二进制就是101010.如图2所示更直观的表达。 计算机内部表示数的字节单位是定长的,如8位,16位,或32位。所以,位数不够时,高位补零,所说,如图3所示,42转换成二进制以后就是。00101010,也即规范的写法为(42)10=(00101010)2.赶紧记住吧。 2、 负整数转换成二进制 方法:先是将对应的正整数转换成二进制后,对二进制取反,然后对结果再加一。还以42为例,负整数就是-42,如图4所示为方法解释。最后即为:(-42)10=(11010110)2. 3、 小数转换为二进制的方法:对小数点以后的数乘以2,有一个结果吧,取结果的整数部分(不是1就是0喽),然后再用小数部分再乘以2,再取结果的整数部分……以此类推,直到小数部分为0或者位数已经够了就OK了。然后把取的整数部分按先后次序排列就OK了,就构成了二进制小数部分的序列,举个例子吧,比如0

东华oj-进阶题第44题-双重回文数

我的梦境 提交于 2020-03-06 18:44:36
44 双重回文数 作者: xxx时间限制: 1S章节: 一维数组 问题描述 : 如果一个数从左往右读和从右往左读都是一样,那么这个数就叫做回文数。例如,12321就是一个回文数,而77778就不是。当然,回文数的首和尾都应是非零的,因此0220就不是回文数。事实上,有一些数(如21),在十进制时不是回文数,但在其它进制(如二进制时为10101)时就是回文数。 编一个程序,从文件读入两个十进制数 N (1<= N <= 15) S (0 <S <10000) 然后找出前N个满足大于S且在两种或两种以上进制(二进制至十进制)上是回文数的十进制数,输出到文件上。 本问题的解决方案不需要使用大于4字节的整型变量。 输入说明 : 只有一行,用空格隔开的两个数N和S。 输出说明 : N行, 每行一个满足上述要求的数,并按从小到大的顺序输出。 输入范例 : 3 25 输出范例 : 26 27 28 代码: /* T44 双重回文数 */ # include <stdio.h> # include <string.h> # define MAX_SIZE 100 int isSymNum ( char num [ ] ) ; void toXScale ( char res [ ] , int n , int x ) ; int main ( ) { int i = 0 , j = 0 ; int

小数在内存中是如何存储的?

旧城冷巷雨未停 提交于 2020-03-06 17:56:35
小数在内存中是如何存储的? 文本关键字:小数、float、double、浮点数、精度 一、IEEE 754(二进制浮点数算术标准) 在学习进制转换时,我们了解到:我们经常使用的十进制数是转换为二进制进行存储的,只需要按照顺序将转换后的结果放在对应的位置上就行了。其实小数的存储也是基于二进制的,不过由于小数由整数部分和小数部分组成,为了方便表示和比较,会使用另外的方式来存储。 IEEE 754是最广泛使用的浮点数运算标准,在标准中规定了四种表示浮点数值的方式: 单精度:32位 - 4字节 双精度:64位 - 8字节 延伸单精度:43+ 延伸双精度:79+ 对于进制转换不清楚的同学可以进传送门: 进制之间如何转换? 1. 存储结构 小数在内存中的存储由三部分组成,分别是符号、阶码(或称指数)、尾数。符号位我们很熟悉,只占一位,并且出现在最高位,0为正,1为负。 单精度:符号1位,阶码8位,尾数23位 双精度:符号1位,阶码11位,尾数52位 延伸精度很少使用,不做介绍 2. 存储方式 一个十进制的小数在进行存储时,首先要将整数部分与小数部分都转换为二进制,然后再整理成类似科学技术法的形式,即:移动小数点,使得小数点的左边只有一位,并且只可能为1(因为是二进制),小数点右侧的部分即为尾数部分,移动小数点的位数将会被记录在指数部分中。为了能够透彻的理解十进制小数转化存储在内容中的过程

浅谈Unicode编码

孤者浪人 提交于 2020-03-06 13:36:29
目录 1.概述 2.ASCII编码 3.历史问题 4.Unicode 4-1.Unicode 编码方案 4-2.关于bom 5.UTF-8 6.UTF-16 1.概述 对于ASCII编码,相信同学们都比较了解,那么对于Unicode、UTF-8和UTF-16,它们是怎么编码的呢?以及它们之间的关系是什么呢?它们与ASCII之间又有什么关系? 本文就来回答这两个问题。 2.ASCII编码 在学校学 C 语言的时候,了解到一些计算机内部的机制,知道所有的信息最终都表示为一个二进制的字符串,每一个二进制位有 0 和 1 两种状态,通过不同的排列组合,使用 0 和 1 就可以表示世界上所有的东西,感觉有点中国“太极”的感觉——“太极生两仪,两仪生四象,四象生八卦”。 在计算机种中,1 字节对应 8 位二进制数,而每位二进制数有 0、1 两种状态,因此 1 字节可以组合出 256 种状态。如果这 256 中状态每一个都对应一个符号,就能通过 1 字节的数据表示 256 个字符。美国人于是就制定了一套编码(其实就是个字典),描述英语中的字符和这 8 位二进制数的对应关系,这被称为 ASCII 码。 ASCII 码一共定义了 128 个字符,例如大写的字母 A 是 65(这是十进制数,对应二进制是0100 0001)。这 128 个字符只使用了 8 位二进制数中的后面 7 位

iOS - Unicode编码

走远了吗. 提交于 2020-03-06 13:35:52
一、来历 为了统一编码,各大龙头企业就决定坐下来对全世界的字符进行编码,并且尽量兼容现有字符集,这就有了unicode编码。Unicode用了21个二进制位,能够编码一百多万个字符,但实际上并没有编码这么多。U+XXXX中XXXX就是码点,就是字符在unicode的数字表示。 编码空间被分成 17 个平面(plane),每个平面有 65,536 个字符。0 号平面叫做「基本多文种平面」(Basic Multilingual Plane, BMP),涵盖了几乎所有你能遇到的字符,除了 emoji。其它平面叫做补充平面,大多是空的。 二、UTF-32、UTF-16、UTF-8 什么字符被表示成什么样子的规定有了,就要考虑怎么存起来了,这就分成了UTF-32、UTF-16、UTF-8三种了。所以UTF-32、UTF-16、UTF-8只是unicode的三种实现方式。 三、UTF-32 unicode用了21位,那我就用4个字节存,准错不了,这就是UTF-32,由于它的极度浪费,所以基本上没人用。 四、UTF-16 UTF-16编码介于UTF-32与UTF-8之间,同时结合了定长和变长两种编码方法的特点。UTF-16把字符存储成2个字节或者4个字节。 具体如下: 基本平面的字符占用2个字节,辅助平面的字符占用4个字节。也就是说,UTF-16的编码长度要么是2个字节(U+0000到U

centos 7 二进制 安装/卸载 docker

北城余情 提交于 2020-03-06 12:44:16
前言 本文介绍 在centos 7 中,使用二进制的方法 安装/卸载 docker。 本文参考: https://www.jianshu.com/p/5739c6cf378c 操作步骤 一. 安装 docker 1.下载、解压 docker wget https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz tar -xvf docker-18.06.3-ce.tgz 如果 wget 方式有问题的话,点击 https://download.docker.com/linux/static/stable/x86_64/ ,下载docker到本地,然后上传到虚拟机也行。 2.拷贝二进制文件到指定目录 chmod +x docker/* cp docker/* /usr/local/bin 3.生成docker.service的文件并设定到/usr/lib/systemd/system目录下 cat > /usr/lib/systemd/system/docker.service <<"EOF" [Unit] Description=Docker Application Container Engine Documentation=http://docs.docker.io [Service]

小数在内存中是如何存储的?

烈酒焚心 提交于 2020-03-06 10:01:36
写在前面:博主是一只经过实战开发历练后投身培训事业的“小山猪”,昵称取自动画片《狮子王》中的“彭彭”,总是以乐观、积极的心态对待周边的事物。本人的技术路线从Java全栈工程师一路奔向大数据开发、数据挖掘领域,如今终有小成,愿将昔日所获与大家交流一二,希望对学习路上的你有所助益。同时,博主也想通过此次尝试打造一个完善的技术图书馆,任何与文章技术点有关的异常、错误、注意事项均会在末尾列出,欢迎大家通过各种方式提供素材。 对于文章中出现的任何错误请大家批评指出,一定及时修改。 有任何想要讨论和学习的问题可联系我:zhuyc@vip.163.com。 发布文章的风格因专栏而异,均自成体系,不足之处请大家指正。 小数在内存中是如何存储的? 文本关键字:小数、float、double、浮点数、精度 文章目录 小数在内存中是如何存储的? 一、IEEE 754(二进制浮点数算术标准) 1. 存储结构 2. 存储方式 二、阶码(指数) 1. 定义 2. 为什么小数被称作浮点数? 3. 移码 三、小数的进制转换 1. 十进制转二进制 2. 二进制转十进制 3. 小数在内存中的存储表示 四、float与double 1. 精度范围 2. 解决精度不足 3. 与长整型的比较 一、IEEE 754(二进制浮点数算术标准) 在学习进制转换时,我们了解到:我们经常使用的十进制数是转换为二进制进行存储的