二进制

Unity中采用二进制存档与读档

允我心安 提交于 2020-03-17 20:59:08
在Unity中首先创建一个Save脚本,用于保存游戏中相关的信息,在这里我存储的是游戏中怪物的位置以及类型、游戏射击总数量、游戏得分等数据,Save脚本的代码如下(这个脚本是不能挂在在场景中的游戏物体上,因为这个类没有继承自MonoBehaviour行为类): using System . Collections ; using System . Collections . Generic ; using UnityEngine ; //串行化,串行化是指存储和获取磁盘文件、内存或其他地方中的对象。 [ System . Serializable ] public class Save { public List < int > livingTargetPosition = new List < int > ( ) ; public List < int > livingMonsterTypes = new List < int > ( ) ; public int shootNum = 0 ; public int score = 0 ; } 然后再创建一个脚本GameManager,并放置以下的方法: //创建Save对象并存储当前游戏状态信息 private Save CreateSaveGO ( ) { //新建Save对象 Save save = new Save ( )

二进制与内存

China☆狼群 提交于 2020-03-17 07:41:24
文章目录 1 进制的概念 2 十六进制 3 二进制 4 变量的内存地址 1 进制的概念 十进制 在日常生活中,通常使用10进制进行计数 基础符号: 0 1 2 3 4 5 6 7 8 9 比如: 2 表示 9 表示 11 表示 十进制 10进制计数时,逢十进位 0 1 2 3 … 7 8 9 10 11 12 13 … 17 18 19 20 21 22 23 … 27 28 29 30 31 32 33 … 37 38 39 一共10个符号,数到9就完了,就必须采用进位的手段来计更大的数 十进制 对于一个10进制的数,每一位有不同的 权重 例如,2 6 2 每一位代表的是: 2 x 100 6 x 10 2 x 1 其中,262 = 2 x 10*2 + 6 x 10 1+ 2 x 10 0 八进制 类比一下,可以得到八进制的规律 基础符号 0 1 2 3 4 5 6 7 计数:( 逢八进位 ) 0 1 2 … 6 7 10 11 12 … 16 17 20 21 22 … 26 27 八进制数 2 3 6 = 2 x 8*2 + 3 x 8 + 6 二进制 类比一下,可以得到八进制的规律 基础符号 0 1 计数:( 逢二进位 ) 二进制数 110 = 1 x 2*2 + 1 x 2 + 0 0 (0) 1 (1) 10 (2) 11 (3) 100 (4) 101 (5)

计算机系统基础摘记——整数在计算机中的表示

穿精又带淫゛_ 提交于 2020-03-17 03:18:45
目录 1 数值的编码 1.1 原码 1.2 移码 1.3 补码 2 整数在计算机中的表示 参考文献 1 数值的编码 计算机是使用二进制来表示信息,因为对于电路来说,表示1和0两个状态是非常容易实现的。若要使用二进制来表示数值,则需要规定二进制对数值进行编码的规则,不同编码规则下,同一串二进制表示的数值可能不同。下面介绍几种常见的整数编码方式。 1.1 原码 原码最容易理解,对于有符号数,最高位是符号位,1表示负数,0表示正数,剩下的各个位乘其位权后相加就是对应的十进制数;对于无符号数,没有符号位。如下表: 二进制编码 有符号数 无符号数 二进制编码 有符号数 无符号数 0000 0 0 1000 8 -0 0001 1 1 1001 9 -1 0010 2 2 1010 10 -2 0011 3 3 1011 11 -3 0100 4 4 1100 12 -4 0101 5 5 1101 13 -5 0110 6 6 1110 14 -6 0111 7 7 1111 15 -7 原码虽然简单,但是计算机并没有采用原码作为其整数编码方案,因为原码有着一些局限性: 对于有符号数,0的表示不唯一; 在二进制层面做加减运算的规则复杂,比如正数的小数减大数(0001 - 0010 = 1001),正负数之间的加减运算(0001 + 1010 = 1001),负数之间的加减运算(1001 -

【算法技巧】位运算装逼指南

江枫思渺然 提交于 2020-03-17 03:03:13
位算法的效率有多快我就不说,不信你可以去用 10 亿个数据模拟一下,今天给大家讲一讲位运算的一些经典例子。不过,最重要的不是看懂了这些例子就好,而是要在以后多去运用位运算这些技巧,当然,采用位运算,也是可以装逼的,不信,你往下看。我会从最简单的讲起,一道比一道难度递增,不过居然是讲技巧,那么也不会太难,相信你分分钟看懂。 判断奇偶数 判断一个数是基于还是偶数,相信很多人都做过,一般的做法的代码如下 if( n % 2) == 01 // n 是个奇数 }   如果把 n 以二进制的形式展示的话,其实我们只需要判断最后一个二进制位是 1 还是 0 就行了,如果是 1 的话,代表是奇数,如果是 0 则代表是偶数,所以采用位运算的方式的话,代码如下: if(n & 1 == 1){ // n 是个奇数。 }    有人可能会说,我们写成 n % 2 的形式,编译器也会自动帮我们优化成位运算啊,这个确实,有些编译器确实会自动帮我们优化。但是,我们自己能够采用位运算的形式写出来,当然更好了。别人看到你的代码,我靠,牛逼啊。无形中还能装下逼,是不是。当然,时间效率也快很多,不信你去测试测试。 2、交换两个数 交换两个数相信很多人天天写过,我也相信你每次都会使用一个额外来变量来辅助交换,例如,我们要交换 x 与 y 值,传统代码如下: int tmp = x; x = y; y = tmp;  

windows下安装和升级mingw二进制组件

三世轮回 提交于 2020-03-17 02:23:29
某厂面试归来,发现自己落伍了!>>> 已有环境:mingw4.5.2 + msys-cn gnu的gcc源码已更新至4.8.2,mingw官网提供4.8.1版本,现通过直接安装二进制包的方式安装4.8.1版的mingw。预先大致阅读官网文章( mingw_howto ),按照官网的说法,最小安装方式下,需要以下二进制包: binutils (bin and dev) mingw-runtime (dev and dll) w32api Required runtime libraries for GCC: mpc (dev and dll) mpfr (dev and dll) gmp (dev and dll) pthreads (dev and dll) iconv (dev and dll) --- 即libiconv zlib gettext gcc-core (bin and dev and dll) 准备工作 为解压缩二进制包,需事先安装好lzma和tar工具。命令lzma -d 用于解压.lzma压缩包,命令 tar -xf 用于归档.tar文件。在官网下载上述二进制包,全部放置同一目录下,假定此目录为 $mingw481。先后使用lzma和tar命令逐一解压缩上述包,即.tar.lzma --> .tar --> bin、 include、lib、libexce

编码原理_base64编码原理

懵懂的女人 提交于 2020-03-16 08:11:06
1.1 Base64 编码原理 1.1.1 概要 : Base64是通讯传输中较为常见的编码方式之一。 (注意是编码算法,而非加密算法) 参数传输的过程中会经常遇到的一种情况:使用英文不会涉及到乱码,但一旦涉及到其他语言就可能会出现乱码情况以及网络上传输的字符并不全是可打印的字符,例如视频、图片等。 Base64的出现就是为了解决此问题,它基于64个可打印的字符来表示二进制的数据的一种方法。 电子邮件出现时,只能传输英文,但随用户增加,中文、日文等文字的用户需求增加,但字符并不能被服务器或网关进行有效处理,因此 Base64就出现了。随之,Base64在URL、Cookie、网页传输少量二进制文件中也有相应的使用。 1.1.2 编码原理 : 我们都知道,计算机数据以字节 (byte)为存储单位, 一个字节由组成8位(bit)二进制组成。那么每一位就则是最小的信息单位。 所以 1Byte=8bit (本文中的byte作为计算存储容量的计量单位。 Byte 也是一种无符号的数据类型,取值 0-255,且不可取负数。但不在本文章的叙述范围内,暂不做考虑。) 第一步,将待转换的字符串每三个字节分为一组,每个字节占 8bit,那么共有24个二进制位。 第二步,将上面的 24个二进制位每6个一组,共分为4组。 第三步,在每组前面添加两个 0,每组由6个变为8个二进制位,总共32个二进制位

Codeforces 1322B - Present

二次信任 提交于 2020-03-16 02:45:38
题目链接: https://codeforces.com/contest/1322/problem/B 题意 给一个 \(n(1\leq n \leq 400000)\) 个数的数组 \(a\) ,其中的元素都是正整数,且数据范围是 \(a_1,a_2,...,a_n(1\leq a_i \leq 10^7)\) 。求下式的值: \[(a_1 + a_2) \oplus (a_1 + a_3) \oplus \ldots \oplus (a_1 + a_n) \\ \oplus (a_2 + a_3) \oplus \ldots \oplus (a_2 + a_n) \\ \ldots \\ \oplus (a_{n-1} + a_n) \\\] 其中, \(\oplus\) 表示异或运算。换言之,就是对于每个无序对 \((i,j)\) ,求出 \((a_i+a_j)\) 的值 \(v_{i,j}\) ,然后再求所有得到的值 \(v_{i,j}\) 的异或和。 时间限制:3000ms 空间限制:512MB 题解 下面展示一下整个算法设计并优化的过程。 一、暴力算法 时间复杂度: \(O(n^2)\) 很多高效的算法,都是先设计一个暴力算法,然后通过观察题目和数据之中的特殊条件作出针对性优化。这题的暴力算法非常简洁,观察上面的式子,可以通过枚举无序对 \((i,j)\) 来直接计算出

算法题目

£可爱£侵袭症+ 提交于 2020-03-15 19:24:23
1. 求二进制数中1的个数 (题目与解法均来自《编程之美》第二章)   题目:对于一个字节(8bit)的变量,求其二进制表示中“1”的个数,要求算法的执行效率尽可能地高。   解法1:举一个8位二进制的例子来分析,对于二进制操作,我们知道,除以一个2,原来的数字就会少个0,如果除的过程中有余,那么就表示当前位置有一个“1”。   以10 100 010 为例:   第一次除以2时,商为1 010 001 ,余为0;   第二次除以2时,商为101 000,余为1.因此可以利用整形数据除法的特点,通过相除和判断余数的值来进行分析,代码如下: int Count(int v) { int num=0; while(v) { if(v%2==1){ num++;//判断是否有余1,并记录 } v=v/2; } return num; }   解法2:除操作比较复杂,可以通过向右唯一的操作达到目的,唯一的不同在于,位移之后如何判断是否有“1”的存在。例如:10 100 001 ,在向右移位的过程中,我们会把最后一位直接丢掉,因此,判断最后一位是否为“1”,可以通过“与”操作达到目的。将这个8位数与000 000 01 进行“与”操作,如果结果为“1”,则表明这个8位数的最后一位是1,否则为0,代码如下: int Count(int v) { int num=0; while(v) {

Linux FTP 服务

江枫思渺然 提交于 2020-03-15 18:41:17
【FTP介绍】 FTP协议 文件传输协议(英文:File Transfer Protocol,缩写:FTP)是一个应用层协议,是用于在网络上进行文件传输的一套标准协议。 FTP协议概述 FTP服务默认运行在20和21两个端口。端口20用于在客户端和服务器之间传输数据流,而端口21用于传输控制流,通常客户端向FTP服务器的21端口发送指令达完成上传下载文件等其他控制操作。当数据通过数据流传输时,控制流处于空闲状态。而当控制流空闲很长时间后,客户端的防火墙会将其会话置为超时,这样当大量数据通过防火墙时,会产生一些问题。此时,虽然文件可以成功的传输,但因为控制会话,会被防火墙断开;传输会产生一些错误。 FTP用户分类 real帐户: 这类用户是指在FTP服务上拥有帐号。当这类用户登录FTP服务器的时候,其默认的主目录就是其帐号命名的目录。但是,其还可以变更到其他目录中去。如系统的主目录等等。 guest用户: 在FTP服务器中,我们往往会给不同的部门或者某个特定的用户设置一个帐户。但是,这个账户有个特点,就是其只能够访问自己的主目录。服务器通过这种方式来保障FTP服务上其他文件的安全性。这类帐户,在Vsftpd软件中就叫做Guest用户。拥有这类用户的帐户,只能够访问其主目录下的目录,而不得访问主目录以外的文件。 anonymous(匿名)用户: 这也是我们通常所说的匿名访问

Linux软件安装管理---源码安装

半世苍凉 提交于 2020-03-15 07:27:25
在Linux平台下,软件包的类型可以划分为两类:源码包、二进制包。 源码包: 即程序软件的源代码(一般也叫Tarball,即将软件的源码以tar打包后再压缩的资源包)。 二进制包: 如 Red Hat发行版的.rpm包,Debian发行版的.deb包。 源码安装的主要步骤 : 1)获取源代码文件:一般为压缩包,并解压。 2)执行config: 一般在源代码目录中有install 或 readme等说明。 运行./config --prefix=PREFIX或者 ./config, config是一个可执行文件,其作用是检测操作系统,并生成makefile文件。其检测的内容有:系统中是否有合适的编译器来编译本软件,是否已经存在本软件所需要的函数库或其他相关软件,操作系统版本是否符合要求等。其中,PREFIX为安装位置。 曾经自己编译qt源码时,运行config时,其先生成了qmake,然后qmke根据.pro文件生成makefile文件。 3)执行make命令。 make根据makefile中指定的规则来将源代码编译成可执行文件。但是,这些可执行文件被放在当前目录下,不会安装到预定的安装目录中。 4)执行make install make会根据makefile中关于install的选项,将上一步编译出来的东西(?)搞到指定的安装目录中。 -----------------------