二进制代码

iOS程序猿必知的位运算相关知识

匆匆过客 提交于 2020-03-09 11:09:19
从现代计算机电路来说,只有 通电/没电 两种状态,即为 0/1 状态,计算机中所有的数据按照具体的编码格式以二进制的形式存储在设备中。   直接操作这些二进制数据的位数据就是位运算,在 iOS开发 中基本所有的位运算都通过枚举声明传值的方式将位运算的实现细节隐藏了起来: typedef NS_OPTIONS(NSUInteger, UIRectEdge) { UIRectEdgeNone = 0, UIRectEdgeTop = 1 << 0, UIRectEdgeLeft = 1 << 1, UIRectEdgeBottom = 1 << 2, UIRectEdgeRight = 1 << 3, UIRectEdgeAll = UIRectEdgeTop | UIRectEdgeLeft | UIRectEdgeBottom | UIRectEdgeRight } NS_ENUM_AVAILABLE_IOS(7_0);   位运算是一种极为高效乃至可以说最为高效的计算方式,虽然现代程序开发中编译器已经为我们做了大量的优化,但是合理的使用位运算可以提高代码的可读性以及执行效率。 基础计算   在了解怎么使用位运算之前,笔者简单说一下CPU处理计算的过程。如果你对 CPU 的计算方式有所了解,可以跳过这一节。   当代码 int sum = 11 + 79 被执行的时候

习题10-7 十进制转换二进制 (15分)

淺唱寂寞╮ 提交于 2020-03-07 09:14:38
本题要求实现一个函数,将正整数n转换为二进制后输出。 函数接口定义: void dectobin( int n ); 函数 dectobin 应在一行中打印出二进制的 n 。建议用递归实现。 裁判测试程序样例: #include <stdio.h> void dectobin( int n ); int main() { int n; scanf("%d", &n); dectobin(n); return 0; } /* 你的代码将被嵌在这里 */ 输入样例: 10 输出样例: 1010 解答: if(n/2>0) dectobin(n/2); printf("%d",n%2); } 来源: CSDN 作者: youandworld 链接: https://blog.csdn.net/qq_30377869/article/details/104708890

如何设计二进制文件格式

两盒软妹~` 提交于 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

浅谈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 位

C语言I博客作业08

半腔热情 提交于 2020-03-06 04:40:32
问题 回答 这个作业属于哪个课程 C语言程序设计II 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-2/homework/9977 我在这个课程的目标是 掌握并熟悉C语言的运用 这个作业在哪个具体方面帮助我实现目标 对代码编译更加熟悉,学习到了while语句,还有进制数的理解 参考文献 《C primer Plus》《C语言程序设计》《CSDN》《百度》《伪代码的写法》 1. PTA实验作业 1.1 jmu-c-二进制转10进制 题目内容 输入一组二进制字符,输出其对应的十进制数。当输入回车键时,输入结束。若输入非二进制字符,输出error input! 1.1.1 数据处理 数据表达:定义两个整型变量n,s,其中n代表一个判断条件,初始赋值为0,s表示转化出的十进制,定义了字符型变量ch,表示输入的二进制数的每个位数 数据处理:while循环当ch不等于回车时执行,回车时跳出while语句,while中输入字符,用switch语句,当ch为0和1时,都执行同一条语句s=s 2+ch-'0';由于是一个字符一个字符的输入,所以得出s后跳出switch但不跳出while,当二进制所有位数输完,按回车跳出while执行下一条,其他情况下,就比如有除0,1外的数字时,赋值n=1,就跳出switch,然后再回车跳出while

66.不用加减乘除做加法

拈花ヽ惹草 提交于 2020-03-05 07:49:04
额。。这道题,确实我不会,,,对于位运算,我有点不熟。 跟着一个题解慢慢了解位运算把。二进制运算规则和十进制是差不多的,只不过十进制遇10进位,而二进制遇2进位,并且二进制进位后保留的余数是0. 二进制的计算是这样的: 1.计算不进位的和,也就是用异或来进行计算^ (异或也就是对应位的数不同则为1,相同则为0) 2.计算进位,也就是先求与&,在左移一位 3.计算a+b,也就是a^b+(a&b)<<1,这个视乎又出现了加号,又要进行这一步,即最后要等到b为0时才结束运算。所以也就得出了循环结束条企鹅,并且每次都将进位的结果给了b,不进位的结果给了a 代码如下: 来源: CSDN 作者: qq_40058686 链接: https://blog.csdn.net/qq_40058686/article/details/104608430

测试笔记:测试基础

纵然是瞬间 提交于 2020-03-04 00:05:24
windows基础 软件定义 计算机=硬件加软件 软件=程序(program)+文档(document) 软件测试的对象:程序和文档都要测试 软件开发阶段划分 阶段一:需求分析阶段(由需求分析人员完成;产出物:《需求规格说明书》) 阶段二:设计阶段(由系统架构师/分析师完成;产出物:《概要设计说明书》和《详细设计说明书》) 阶段三:编码阶段(由开发人员完成/程序员完成;产出物:程序/代码) 不同的开发阶段引入的bug比例如何? 需求分析阶段引入的bug最多(大概占bug总数的55%左右) 其次是设计阶段(大概占缺陷总数的25%左右) 最少的是编码阶段(大概占缺陷总数的15%左右) 还有5%左右的缺陷是由系统兼容性或者配置原因造成的。 需求分析阶段引入的bug最多,其次是设计阶段,引入bug阶段最少的是编码阶段 因此:1)在测试中不能只测程序,文档也必须测 2)测试工作应尽早介入,并且贯穿整个开发周期始终(尽早测试原则,不断测试原则) 什么是软件缺陷 1.软件的缺陷–defect,bug 2.软件缺陷的定义:1)需求要求的功能没有实现 2)实现了需求没有的功能(画蛇添足) 3)软件出现了指明不应出现的错误 4)需求虽未明确指明,但是应该实现的功能没有实现 eg:法规; 说明:需求不是完美的,有可能有遗漏,但是测试人员应该专业,发现bug就要提交,即使需求中没有提及 5)软件不易使用

二进制协议 vs 文本协议

六月ゝ 毕业季﹏ 提交于 2020-03-03 03:39:29
二进制协议 vs 文本协议 在服务器程序开发过程中,各个服务直接需要进行交互。这样就需要定义消息的协议,一般来说协议主要包括二进制协议和文本协议,下面就我在工作中用到的两种协议说说自己的看法。 1 二进制协议 目前在公司做服务器后台开发的工作,需要多个服务程序进行交互。因为是TCP直连,所以直接采用二进制消息的方式。消息的定义统一采用消息头(消息ID+消息长度)+x消息体(消息内容)的方式,所以扩展是比较方便的。用代码表示如下 struct CommonMsg { uint32_t m_msgId; uint32_t m_msgLen; }; struct KeepAlive:public CommonMsg { uint32_t m_timeStamp; }; doRead() { CommonMsg * msg=(CommonMsg*)buffer; if(msg->m_msgId==ID_KEEP_ALIVE) { handleKeepAlive(msg); } } 1.1 优点 二进制协议有以下几个优点: 1. 节约内存,带宽。 二进制协议只保存了必须的信息,在需要传递大量信息的时候,对于带宽的节省是非常明显的。 2. 方便加密。 二进制协议很方便使用异或 或者压缩的方式进行加密,防止协议被破解,从而保护了传递的信息,增加协议破解的难度。 1.2 缺点

Java千问:Java位运算经典应用(三)

守給你的承諾、 提交于 2020-03-02 10:47:33
接上篇 五、字符串加密 在很多场合下,都需要给字符串进行加密,使字符串由”明文”变成”密文”。对字符串加密有很多种算法,其实我们利用位运算也可以实现简单的加密效果。用位运算实现加密的原理很简单,这里为大家讲解一下。假设有两个整数a和b ,a^b的结果为c。我们可以认为a就是原始数据,a与b进行异或运算所得到的c就是加密后的数据,b在加密过程中扮演着”密钥”的角色。在不知道b值的情况下,如果只是知道c的值,任何人无法仅仅根据c的值反推出a的值,也就是说,如果我们只知道加密后的数据,而不知道密钥,根本无法确切得知原始数据a的值到底是多少。如果想根据加密后的数据c来还原初始数据a,就必须用密钥b来解密。解密的方法也很简单,只要进行c^b的操作就可以了。其原理就是”a^b^b=a”,在这个等式中,”a^b”的结果就是c,所以”c^b=a”。 理解了加密和解密的最基本原理之后,我们再来说说如何具体对字符串实施加密操作。我们知道,位运算符只能对byte、short、int、long和char这几种基础类型的数据进行运算,对字符串这种引用类型的数据并不适用。既然字符串无法进行位运算,那么该如何对字符串进行加密呢?我们知道,无论是图片还是文本,在计算机当中都是以二进制数的形式进行存储的。既然是二进制数,那么每8位的二进制数,都可以转换成一个byte类型的数据。而N个8位二进制

了解面试算法之

。_饼干妹妹 提交于 2020-03-01 12:26:36
算法,一门既不容易入门,也不容易精通的学问。 对于笔者来说算法算是我程序员生涯很不擅长的技能之一了,自从互联网界招人进入平静期后,越来越多的大厂在社招的时候不但会考验面试者的工作所用到的技能,而且会用算法题来考验面试者的逻辑思维能力和基本数据结构的掌握能力。这也就让想要社招进入大厂的部分同学有了一些望而却步的心理,毕竟工作中大部分时间在与UI层面的逻辑打交道,数据处理方面即使之前在学校中掌握的还还不错,几年的 CV 生活,估计也忘的差不多了。 但是作为一条有梦想的咸鱼,我们还是要重拾这些知识的。之前写过一篇 搞懂单链表常见面试题 ,有兴趣的同学可以跳转浏览。今天笔者将会挑选几道栈与队列和位运算的相关题目来回顾下相关算法的基本知识。 栈与队列 栈与队列分别是两种数据结构,不同语言对于栈和队列有着不同的声明,在 java 中 Stack 类是继承自 Vector 集合的子类,Queue 则是以接口形式存在,常用的其实现类是 LinkedList 这个双向队列。在C++的标准模版库也是有这两个数据结构定义的具体类的。 栈数据结构的特点是 FILO(first in last out) 即先进后出,队列则是 FIFO(first in first out)即先进先出。相信栈与队列的数据结构的基本特点大家也是熟记于胸了。下面就带大家看一道面试题来带大家看下这两者在面试题中的形式。