二进制数据的巧妙应用

二进制数据的巧妙应用
二进制数据的巧妙应用

二进制数据的巧妙应用

摘要:众所周知,在计算机内部,数据或信息最终都以二进制存储。在实际应用中,人们虽然习惯使用十进制数据解决问题,但对于有些问题的处理,如果能够合理的使用二进制数据,会获得意想不到的效果,比如在几张带有编号的纸板上写上一些数字,利用二进制与十进制的转换快速猜出该数字;在电报中使用二进制数据编写报文内容,然后通过一定的规律来译码,得到清晰的报文内容。

关键词:二进制十进制猜测明码暗码

二进制数据中只有两个数码,即0和1,随机的给出一个二进制数据,比如11011,记下它们的位权,然后将这些位权与对应位上的数码相乘,所得之和即为一个十进制数据,这是一个即便是计算机初学者都掌握的知识,但是如果能合理的使用它,有时候却非常有趣!

1 二进制与数据猜测

事先准备N张卡片,从0到N-1依次编上号,利用二进制就可以准确的猜出1到2N-1之内的任意自然数。假设N=5,则可以准确的猜出1到31之间的任意自然数。从0到4依次给每张卡片编号。

所有编上号的卡及各卡上的数字全部记下后,猜数的原理是:若数据不在卡上,则相应位置记为0,反之,记为1。

2 二进制数据与电文

二进制数

二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”。 二进制数(binaries)是逢2进位的进位制,0、1是基本算符;计算机运算基础采用二进制。电脑的基础是二进制。在早期设计的常用的进制主要是十进制(因为我们有十个手指,所以十进制是比较合理的选择,用手指可以表示十个数字,0的概念直到很久以后才出现,所以是1-10而不是0-9)。电子计算机出现以后,使用电子管来表示十种状态过于复杂,所以所有的电子计算机中只有两种基本的状态,开和关。也就是说,电子管的两种状态决定了以电子管为基础的电子计算机采用二进制来表示数字和数据。常用的进制还有8进制和16进制,在电脑科学中,经常会用到16进制,而十进制的使用非常少,这是因为16进制和二进制有天然的联系:4个二进制位可以表示从0到15的数字,这刚好是1个16进制位可以表示的数据,也就是说,将二进制转换成16进制只要每4位进行转换就可以了。 二进制的“00101000”直接可以转换成16进制的“28”。字节是电脑中的基本存储单位,根据计算机字长的不同,字具有不同的位数,现代电脑的字长一般是32位的,也就是说,一个字的位数是32。字节是8位的数据单元,一个字节可以表示0-255的十进制数据。对于32位字长的现代电脑,一个字等于4个字节,对于早期的16位的电脑,一个字等于2个字节。 例子: 如十进制10 变二进制 10/2 = 5 余0 5/2 = 2 余1 2 /2 =1 余0 1/2 = 0 余1 计算结束,把余数从后向前写出:1010,即十制10 变为二进制后是1010; 二进制计算与十进制计算类似,只不过是逢二进。以加法为例: 0 + 0 = 0 0+1 =1 1+0 = 0 1+1= 10 //如二进制100 + 101计算 1 0 0 + 1 0 1 ---------- 1 0 0 1 相当于十进制4+5 = 9

二进制数在经典数学题中的应用-精选教育文档

二进制数在经典数学题中的应用 当代电子计算机的核心之一就是使用二进制数。早在1673年,27岁的德国数学家布莱尼兹在研究计算机模型时就认识到了二进制数的重要性,并系统地提出了二进制数的运算法则。二进制数不仅在电子计算机中得到了广泛的应用,而且在实际生活中也得到了广泛的应用,尤其是在解决一些比较复杂的数学题时,更是发挥了重要的作用。本文笔者简要介绍了一下二进制数的概念以及应用原则,并以两个经典数学题为例分析了二进制数在经典数学题中的应用。 一、二进制数的概念 下面我们以十进制数为例,来认识一下二进制数。十进制数是以十为基底的进位计数制,十进制数是使用0、1、2、3、4、5、6、7、8、9十个有序的数字符号及一个小数点符号来表示的,而且是“逢十进一”,即各相邻位的“权”(所谓权,指的是在进位数制中,为了确定一个数位的实际数值必须乘上的因子)之比都固定为“10”。以此为基础再来看二进制数,从进位计数制的理论观点来看,在所有可能的基底中,二进制数最小的基底是2。在二进制数中,只有数字符号0和1及一个小数点符号,并且是“逢二进一”,各相邻位的“权”之比为“2”。无论是刚才介绍的十进制数还是二进制数,都属于进位计数制,它们各相邻位的“权”之比都是固定的。

二、二进制数的运算规则 二进制数的运算不仅包括算术运算,而且还包括逻辑运算。在算术运算上,二进制数与十进制数一样,同样可以进行加、减、乘、除四则运算。二进制数的逻辑运算则是指对因果关系进行分析的一种运算。逻辑运算的结果并不表示数值大小,而是表示一种逻辑概念。常见的二进制数的逻辑运算有“与”“或”“非”和“异或”4种。 1.二进制数的四则运算法则 加法:0+0=0,0+1=1,1+0=1,1+1=0(向高位进位); 减法:0-0=0,0-1=1(向高位借位),1-0=1,1-1=0; 乘法:0×0=0,0×1=0,1×0=0,1×1=1; 除法:0÷1=0,1÷1=0。 2.二进制数的逻辑运算规则 若干位二进制数组成逻辑数据,位与位之间无“权”的内在联系。对两个逻辑数据进行运算时,每位之间相互独立,运算是按位进行的,不存在算术运算中的进位和借位,运算结果仍是逻辑数据。 与:用符号“∧”来表示0∧0=0,0∧1=0,1∧0=0,1∧1=1; 或:用符号“∨”来表示0∨0=0,0∨1=1,1∨0=1,1∨1=1; 非:常在逻辑变量上面加一横线表示=1,=0; 异或:用符号“”来表示 00=0,01=1,10=1,11=0。 三、二进制数在经典数学题中的应用

数据库二进制数据流处理

数据流处理 1.从数据库读取数据二进制流创建文件 public static string LoadFile(string filePath, string fileName) { try { if(CreateFolder(System.Environment.CurrentDirectory + filePath)) { if (!System.IO.File.Exists(System.Environment.CurrentDirectory + filePath + @"\" + fileName)) { //创建文件对象以创建文件的形式打开文件 System.IO.FileStream fs = new System.IO.FileStream(System.Environment.CurrentDirectory + filePath + @"\" + fileName, System.IO.FileMode.Create); byte[] Data = new byte[0]; object cell = AppServer.YsServiceBaseClient.DN_YS_SelectDATACELL("YS", fileName); Data = (byte[])cell; //将数组的内容写进文件 fs.Write(Data, 0, Data.Length); //关闭文件 fs.Close(); } } } catch { } //return System.IO.Path.GetFullPath(filePath + @"\" + fileName); return System.Environment.CurrentDirectory + filePath + @"\" + fileName; }

巧用二进制编程

巧用二进制数思想编程方法例谈 浙江慈溪实验中学张利波315300 二进制数在计算机中有着非常重要的意义,在信息学竞赛中,巧妙使用二进制数的特点,可能使程序思路更加简洁明了,解题也变得相当简单,下面列举几个程序来说明。 例1、如图所示为一个城市街道简图,小明从A点出发到达B点。如果在每一个路口只能向右或向上走,问小明可有多少条行走路线?并输出每条路线。 问题分析:该题一般的方法可以用深度优先遍历或广度优 编程呢?根据题意,可以通过以下几个方面进行分析: ①行走方向只有两种向右走或向上走,那么我们不妨 用0表示向上走,1表示向左走;②根据路径从A点到B 点,不论走哪条路径,走的步数总是固定的,如图中就是7步,因此,我们可以确定二进制数的位数是7位;③根据行走方向,用“1”表示向右走,据图向右走的步数为4,用二进制数表示又产生一个约束条件,7位二进制数中的“1”的个数为4,同理,“0”的个数为3。 根据以上分析,原题即转换成对7位二进制数的筛选,范围在(0001111)2——(1111000)2之间,且分离各位数字,相加为4,符合上述条件的,即为可以行走的一条路线,要统计所有可行走路线,只要对每个符合条件的线路数量累加即可。参考程序中避免了十进制数转换成二进制数的操作,采用穷举所有7位的二进制数并对此进行筛选完成。参考程序如下。 #include"stdafx.h" #include #include using namespace std; int _tmain(int argc, _TCHAR* argv[]) { time_t begin,end; begin=clock(); int x; int total=0; for(int i=0X0000000F;i<0X00000079;i++) { int x=i; //求i的二进制码中有多少个 x= (x & 0X55555555) + ((x >> 1) & 0X55555555); x= (x & 0X33333333) + ((x >> 2) & 0X33333333); x= (x & 0X0F0F0F0F) + ((x >> 4) & 0X0F0F0F0F);

二进制与各种类型的数据转换

二进制与各种类型的数据转换 注:下面所说的都和语言无关,不管是c、c++、c#、java、objective-c,都是一样的。但是不同的语言定义数组的方式不一样,c、c++是这样的:byte temp[],java、c#是这样的:byte []temp。下面定义数组统一byte []temp方式; 1.基本知识 byte[] temp= {0,0,0,0,0,0,0,15}; 在内存中存的是什么 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00001111 如何把一个整数转换为byte[]数组,以一个int整数为例; int temp = 0x0F070301; 在内存中存放的16进制数据 0x0f x07 0x03 x01 在内存中存放的10进制数据 15 7 3 1 在内存中存放的2进制数据 00001111 00000111 00000011 00000001 2.整数转byte数组 我要把temp = 0x0F070301;转为byte数组是什么意思呢?先看temp转换为byte数组的结果。 byte[] temp1= {0x0F,0x07,0x03,0x01}; 转换方法: int temp3 = 0x0F070301&0xFF 此时temp3 就等于0x01 int temp3 = (0x0F070301>> 8)&0xFF 此时temp3 就等于0x03 依次类推即可得到数组元素的每个值。 3.byte数组转换为int类型 ●c、c++的转换方式: 如何把一个byte数组转换为int类型。 这种转换在c和c++中最方便,当然在objective-c可以使用c的代码也很方便。 例如有数组 byte temp1[]= {0x0F,0x07,0x03,0x01}; 因为temp1数组的指针,转换方式如下: int* p_temp1 = (int*)temp1; int temp1_value = *p_temp1; 此时temp1_value为0x0F070301 ●其他语言的转换方式: 在所有语言(c、c++、c#、java、objective-c)中,通用的转换方式为: byte temp1[]= {0x0F,0x07,0x03,0x01}; tmp0 =emp1[0]

计算机一级考试复习资料(二进制、基础知识、网络应用、数据库知识解析)

计算机等级一级等级复习资料

理论复习题 (一)计算机基础知识 (1)我国第一台电子计算机诞生于哪一年? A)1948年 B)1958年 C)1966年 D)1968年 【答案】:B 【解析】:我国自1956年开始研制计算机,1958年研制成功国内第一台电子管计算机,名叫103机,在以后的数年中我国的计算机技术取得了迅速地发展。 (2)计算机按照处理数据的形态可以分为 A)巨型机、大型机、小型机、微型机和工作站 B)286机、386机、486机、Pentium机 C)专用计算机、通用计算机 D)数字计算机、模拟计算机、混合计算机 【答案】:D 【解析】:计算机按照综合性能可以分为巨型机、大型机、小型机、微型机和工作站,按照使用范围可以分为通用计算机和专用计算机,按照处理数据的形态可以分为数字计算机、模拟计算机和专用计算机。 (3)与十进制数254等值的二进制数是 A)11111110 B)11101111 C)11111011 D)11101110 【答案】:A 【解析】:十进制与二进制的转换可采用"除二取余"数。 (4)下列4种不同数制表示的数中,数值最小的一个是 A)八进制数36 B)十进制数32 C)十六进制数22 D)二进制数10101100 【答案】:A 【解析】:解答这类问题,一般都是将这些非十进制数转换成十进制数,才能进行统一的对比。非十进制转换成十进制的方法是按权展开 (5)十六进制数1AB对应的十进制数是 A)112 B)427 C)564 D)273 【答案】:A 【解析】:十六进制数转换成十进制数的方法和二进制一样,都是按权展开。 (6)某汉字的国际码是5650H,它的机内码是 A)D6D0H B)E5E0H C)E5D0H D)D5E0H 【答案】:A 【解析】:汉字机内码=国际码+8080H。 (7)五笔型输入法是 A)音码 B)形码 C)混合码 D)音形码 【答案】:B 【解析】:全拼输入法和双拼输入法是根据汉字的发音进行编码的,称为音码;五笔型输入法根据汉字的字形结构进行编码的,称为形码;自然码输入法兼顾音、形编码,称为音形码。 (8)下列字符中,其ASCII码值最大的是 A)STX B)8 C)E D)a 【答案】:D 【解析】:在ASCII码中,有4组字符:一组是控制字符,如LF,CR等,其对应ASCII 码值最小;第2组是数字0~9,第3组是大写字母A~Z,第4组是小写字母a~z。这4组对应的值逐渐变大。字符对应数值的关系是"小写字母比大写字母对应数大,字母中越往后对应的值就越大"。 (9)以下关于机器语言的描述中,不正确的是 A)每种型号的计算机都有自己的指令系统,就是机器语言 B)机器语言是惟一能被计算机识别的语言 C)计算机语言可读性强,容易记忆 D)机器语言和其他语言相比,执行效率高

二进制介绍

二进制 二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”,由18世纪德国数理哲学大师莱布尼兹发现。当前的计算机系统使用的基本上是二进制系统,数据在计算机中主要是以补码的形式存储的。计算机中的二进制则是一个非常微小的开关,用“开”来表示1,“关”来表示0。 20世纪被称作第三次科技革命的重要标志之一的计算机的发明与应用,因为数字计算机只能识别和处理由‘0’.‘1’符号串组成的代码。其运算模式正是二进制。19世纪爱尔兰逻辑学家乔治布尔对逻辑命题的思考过程转化为对符号"0''.''1''的某种代数演算,二进制是逢2进位的进位制。0、1是基本算符。因为它只使用0、1两个数字符号,非常简单方便,易于用电子方式实现。 运算 加法 有四种情况: 0+0=0 0+1=1 1+0=1 1+1=10 0 进位为1 减法 0-0=0,1-0=1,1-1=0,0-1=1。 除法 0÷1=0,1÷1=1。 乘法 有四种情况:0×0=0 1×0=0 0×1=0 1×1=1 优点 (1)容易表示:二进制数只有“0”和“1”两个基本符号,易于用两种对立的物理状态表示。例如,可用"1"表示电灯开关的“闭合”状态,用“0”表示“断开”状态;晶体管的导通表示“1”,截止表示“0”;电容器的充电和放电、电脉冲的有和无、脉冲极性的正与负、电位的高与低等一切有两种对立稳定状态的器件都可以表示二进制的“0”和“1”。而十进制数有10个基本符号(0、1、2、3、4、5、6、7、8、9),要用10种状态才能表示,要用电子器件实现起来是很困难的。 (2)运算简单:二进制数的算术运算特别简单,加法和乘法仅各有3条运算规则

2位二进制数据比较器实验报告

2位二进制数据比较器实验报告 一实验目的 1.熟悉Quartus II软件的基本操作 2.学习使用Verilog HDL进行设计输入 3.逐步掌握软件输入、编译、仿真的过程 二实验说明 输入信号输出信号 A1 A0 B1 B0 EQ LG SM 0 0 0 0 1 0 0 0 0 0 1 0 0 1 0 0 1 0 0 0 1 0 0 1 1 0 0 1 0 1 0 0 0 1 0 0 1 0 1 1 0 0 0 1 1 0 0 0 1 0 1 1 1 0 0 1 1 0 0 0 0 1 0 1 0 0 1 0 1 0 1 0 1 0 1 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 0 1 1 0 1 0 1 0 1 1 1 0 0 1 0 1 1 1 1 1 0 0 逻辑表达式: 三实验要求 1、完成2位二进制数据比较器的Verilog HDL程序代码输入并进行仿真 2、采用结构描述方式和数据流描述方式 3、完成对设计电路的仿真验证 A1 A0 EQ B1 comp_2 LG 本次实验是要设计一个2位的二进制数据比较 器。该电路应有两个数据输入端口A、B,每个端口的 数据宽度为2 ,分别设为A0、A1和B0、B1、A0、B0 为数据低位,、B1为数据高位。电路的输出端口分 别为EQ(A=B 的输出信号)、LG(A>B时的输出信号) 和SM(A

四、实验过程 1 程序代码 (1) module yangying(A,B,EQ,LG,SM); input [1:0]A,B; output EQ,LG,SM; assign EQ=(A==B)1'b1:1'b0; assign LG=(A>B)1'b1:1'b0; assign SM=(AB) begin EQ<=1'b1; LG<=1'b0; SM<=1'b0; end else begin EQ<=1'b0; LG<=1'b0; SM<=1'b1; end end endmodule 2 仿真结果

二进制算法

二进制乘法和加法都是通过对二进制数的移位来实现的,移位相当于×2,计算机算根据给出的加法式子与乘法式子算要移多少位。 扩展: 1、二进制数据的表示法 二进制数据也是采用位置计数法,其位权是以2为底的幂。例如二进制数据110.11,其权的大小顺序为2^2、2^1、2^0、2^-1、2^-2。对于有n位整数,m 位小数的二进制数据用加权系数展开式表示,可写为: (a(n-1)a(n-2)…a(-m))2= a(n-1)×2^(n-1)+a(n-2)×2^(n-2)+……+a(1)×2^1+a(0)×2^0+a(-1)×2^(-1)+a(-2)×2^(-2)+……+a(-m)×2^(-m) 二进制数据一般可写为:(a(n-1)a(n-2)…a(1)a(0).a(-1)a(-2)…a(-m))2。 注意: 1.式中aj表示第j位的系数,它为0和1中的某一个数。 2.a(n-1)中的(n-1)为下标,输入法无法打出所以用括号括住,避免混淆。 3.2^2表示2的平方,以此类推。 【例1102】将二进制数据111.01写成加权系数的形式。 解:(111.01)2=(1×2^2)+(1×2^1)+(1×2^0)+(0×2^-1)+(1×2^-2) 二进制和十六进制,八进制一样,都以二的幂来进位的。 二进制数据的算术运算的基本规律和十进制数的运算十分相似。最常用的是加法运算和乘法运算。 1. 二进制加法 有四种情况:0+0=0 0+1=1 1+0=1 1+1=10 进位为1

【例1103】求(1101)2+(1011)2 的和解: 1 1 0 1 + 1 0 1 1 ------------------- 1 1 0 0 0 2. 二进制乘法 有四种情况:0×0=0 1×0=0 0×1=0 1×1=1 【例1104】求(1110)2 乘(101)2 之积

运用8421巧记进制转换

运用“8421”巧记进制转换 广东深圳市田东中学 张春卉 在从事计算机教学的过程中,我发现了这样一个问题,在讲解进制转换的时候,很多学生都觉得比较吃力,尤其是二进制与十六进制的转换(其对应关系记起来很烦琐)。教材在这方面也没有一个非常易记的规律。下面就进制转换的问题,谈一下我自己的教学方法。 1. 二进制与十进制的转换 此种转换相对简单一些,其中二进制转为十进制只要按权展开。例:二进制的(10111.101)按权展开为(1×24+0×23+1×22+1×21+1×20+1×2-1+0×2-2+1×2-3),计算结果为十进制的(23.625)。十进制转换为二进制时,整数部分除2取余,结果反序书写,小数部分乘2取整,结果顺序书写。例: 2 87 ------1 0.875 2 4 3 ------1 * 2 2 21 ------1 1.75 ------1 2 10 ------0 0.75 2 5 ------1 * 2 2 2 ------0 1.5 ------1 1 0.5 * 2 1.0 ------1 (87)10=(1010111)2 (0.875)10=(0.111)2 即:(87.875)10=(1010111.111)2 2.二进制与十六进制的转换 在讲转换之前,应让学生搞明白并记牢十六进制中的十六个数字,即:0、1、2、3、4、5、6、7、8、 9、A 、B 、C 、D 、E 、F 。其中,A 、B 、C 、D 、E 、F 分别对应着十进制中的10、11、12、13、14、15。 (1)二进制转换为十六进制: 第一步,打点分组。二进制中相邻的四位数字相当于十六进制中的一位数字,例:(1011)2=(B ) 16 。在分组的时候,以小数点为界(无小数位只计整数部分) ,整数部分从右向左,每四位一组并打点,小数部分从左向右,每四位一组并打点,不足四位补“0”。 例:(10101111010.0011111)2打点后为 (’0101’0111’1010.0011’1110’)2 第二步,转换。这是关键之处。首先让学生记住数字,即“8421”,其得来为(23222120),在二进制转为十六进制,每组分别与“8421”一一对应,对应位为“0”的不计,其余位相加(十进制数),结果转换为十六进制数,小数部分相同。 例:(0101)2=(0+4+0+1)10=(5)10=(5)16 8421 多位十六进制的转换也如此,例: (10101111010.0011111)2=(0101’0111’1010.0011’1110’)2 =[(4+1)’(4+2+1)’(8+2).(2+1)’(8+4+2)’]16=(57A.3E)16 (2)十六进制转换为二进制: 第一步,分组对应。首先将每一位十六进制数转换为十进制数,然后将十进制数转换为“8421”的和的形式,其中含有“8”、“4”、“2”、“1”中任一位的其对应项用“1”表示,否则用“0”代替,并去掉中间的加号,按“8421”顺序书写,即每一位十六进制数对应四位二进制数。 例:(B )16=(11)10=(8+2+1)10=(1011)2 第二步,转换。将每一位十六进制数均与“8421”相对应,并转换为四位的二进制数,最后按十六书写方向 书写 方向

进制转换及应用

进制转换及应用 一、引言 计算机的一个重要理论基础就是二进制思想。任何信息最终都是以二进制数的形式存储在计算机中的,在计算机中有时还用到十六进制和八进制。所以,在实际应用中,经常需要将一个十进制数转换成二进制、八进制或十六进制的数,有时又需逆向转换,将二进制、八进制或十六进制的数转换成十进制数,有时还需要在二进制、八进制和十六进制数之间进行相互转换(2,8,10,16等一般称为“基”)。 不同进制数之间转换的基本算法是: (1)十进制整数转换成n进制数的方法:将十进制整数不断除以n取余,最后反序输出即可。 (2) n进制数(整数、实数都可以)转换成十进制数方法:按“权n”展开,即表示成若干项形如 a i*n i的累加和即可。 (3)二进制、八进制、十六进制之间的转换方法:利用3位二进制表示1位八进制数,4位二进制数表示1位十六进制数的基本思想,3位一段(或4位一段)分别转换即可。 注:一般2≤n≤16,十进制以上、十六进制以下的数制除了0~9十个字符外,还用到A、B、C、D、E、F几个字符,分别表示10~15。对于十进制,我们称它的基数为10,而二进制的基数就是2,十六进制的基数就是16。对于十进制数1234.56,我们可以表示成1*103+2*102+3*101+4*100+5*10-1+6*10-2,我们把10i称之为十进制各个位的“权”。对于二进制数11001.01001,我们也可以类似地表示成1*24+1*23+1*20+1*2-2+1*2-5,即二进制各个位的权为2i。这一方法(按权展开)同样可以用在任意n进制中。 二、不同进制数之间的相互转换 1、十进制正整数转换成任意n进制数 [方法介绍] 就是模拟小学学过的除法运算,比如要把十进制整数39转换成二进制数,则转换方法如下左图,即不断除以2,直到商为0,再倒序输出即可,结果一般表示为(39)10 =(100111)2 。而要把十进制整数245转换成八进制数,方法一样,只要不断地除以8即可,如下右图所示,结果可以表示为:(245)10 = (365)8。一定要注意的是“倒序输出”。 图1 十进制整数转换成n进制方法示意图 [算法描述] 设十进制数为Y,要转换成n进制,用数组a存放最后的转换结果,i为数组下标,则算法描述如下:i:=0; 重复做: i:=i+1; a[i]:=Ymod n Y:= Ydiv n

二进制数据的读取

二进制数据的读取 使用fread函数可从文件中读取二进制数据,它将每个字节看成整数,并将结果以矩阵形式返回。对于读取二进制文件,fread必须制定正确的数据精度。 fread的基本调用方法是: A=fread(fid) 其中fid是一个整数型变量,是通过调用fopen函数获得的,表示要读取的文件标识符,输出变量A为矩阵,用于保存从文件中读取的数据。 例如文件test.txt的内容如下: test it 用fread函数读取该文件,输入如下命令: >> f=fopen('test.txt','r'); >> answer=fread(f) answer = 116 101 115 116 32 105 116 输出变量的内容是文件数据的ASCII码值,若要验证读入的数据是否正确,通过下面的命令可以验证。 >> disp(char(ans1')) test it

fread函数的第二个输入参数可以控制返回矩阵的大小,例如: >> f=fopen('test.txt','r'); >> answer=fread(f,2) answer = 116 101 也可以把返回矩阵定义为指定的矩阵格式,例如 >> f=fopen('test.txt','r'); >> an=fread(f,[2 3]) answer = 116 115 32 101 116 105 使用fread函数的第三个输入变量,可以控制fread将二进制数据转成MATLAB 矩阵用的精度,包括一次读取的位数(Number of Bits)和这些位数所代表的数据类型。 常用的精确度类型有下列几种,如表2-6所示。 表2-6 常见的精确度类型 2.4.2 二进制数据的写入 使用fwrite函数可将矩阵按所指定的二进制格式写入文件,并返回成功写入文件的大小。函数的调用方式如下:

神奇的二进制修订后的结果

神奇的二进制 浙江省镇海中学 贺洪鸣 编者按:计算机只能认识二进制,二进制数也是大家非常熟悉的一种数字。其实,正因为二进制只有两种值0和1,使得它能很好地表示自然界中的某些正反两类事物,比如电灯的开关,硬币的正反两面等。本文正是充分地发掘了二进制的性质,加以巧妙利用,达到巧解问题的目的。 例一:求a m mod n 的值,1≤m,n ≤109。 【问题分析】 令m 的二进制表示为b r b r-1…b 2b 1。则: 1211 21121 121 ...*2 *2...*22222((...(())...))r r r r r r r r b b b b m b b b b b b b b a a a a a a a -----++++=== 于是,可得以下算法: 【算法】 1. 求得m 的二进制表示b r b r-1…b 2b 1 2. ans ←1 3. For k ←r downto 1 do begin 4. ans ←(ans*ans) mod n 5. If bk=1 then ans ←(ans*a) mod n end 6. 输出ans 此算法的时间复杂度仅为O(log(m))。 例二:灯泡 (试题来源:《算法艺术与信息学竞赛》第228页2.2.6,刘汝佳、黄亮,清华大学出版社。) 【问题描述】 有n 个灯泡排列成环形(灯泡1左边是灯泡n , 灯泡2左边是灯泡1,灯泡3左边是灯泡2,… ,灯泡n 左边是灯泡n-1)。在时间0时,有的灯泡是亮的,有的是不亮。灯泡i 在时间t+1(t ≥0)改变状态(亮→不亮,不亮→亮)当且仅当灯泡i 左边的灯泡在时间t 是亮的。求在时间m 时,每个灯泡的状态(n ≤106,m ≤109)。 本题被作者用在了2007年宁波市决赛试题的第二题,要求时限1秒。 【问题分析】 直接模拟,必然超时。考虑到时刻m 最大达到109,而它的二进制表示最多只有30位。如果我们能够找到与例一相似的方法,计算时刻m 时,只算log(m)次,则n 个灯泡,只计算nlog(m),最多约3000万次,就能在1秒的时限内出解了。 1.找规律 我们从简单的情况入手,找规律。 在时刻t 时,以X[k]=1表示第k 个灯是亮的,以X[k]=0表示第k 个灯为暗的。如果时刻t 时各灯状态分别为X[1],X[2],…,X[n],则时刻t+1时各灯状态为:X[1] xor X[n],

二进制运算

二进制运算 二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”。二进制数据也是采用位置计数法,其位权是以2为底的幂。 二进制数据的算术运算的基本规律和十进制数的运算十分相似。最常用的是加法运算和乘法运算。 1. 二进制加法 有四种情况:0+0=0 0+1=1 1+0=1 1+1=10 进位为1 【例1103】求(1101)2+(1011)2 的和 解: 1 1 0 1 + 1 0 1 1 ------------------- 1 1 0 0 0 2. 二进制乘法 有四种情况:0×0=0 1×0=0 0×1=0 1×1=1 【例1104】求(1110)2 乘(101)2 之积 解: 1 1 1 0 × 1 0 1 ----------------------- 1 1 1 0 0 0 0 0 1 1 1 0 ------------------------- 1 0 0 0 1 1 0 (这些计算就跟十进制的加或者乘法相同,只是进位的数不一样而已,十进制的是到十才进位这里是到2就进了) 二进制与十进制间的相互转换: (1)二进制转十进制 方法:“按权展开求和” 例:(1011.01)2 =(1×2^3+0×2^2+1×2^1+1×2^0+0×2^(-1)+1×2^(-2) )10 =(8+0+2+1+0+0.25)10 =(11.25)10

规律:个位上的数字的次数是0,十位上的数字的次数是1,......,依奖递增,而十 分位的数字的次数是-1,百分位上数字的次数是-2,......,依次递减。 注意:不是任何一个十进制小数都能转换成有限位的二进制数。 (2)十进制转二进制 ·十进制整数转二进制数:“除以2取余,逆序排列”(短除反取余法 例:(89)10 =(1011001)2 2 89 2 44 (1) 2 22 0 2 11 0 2 5 (1) 2 2 (1) 2 1 0 0 (1) ·十进制小数转二进制数:“乘以2取整,顺序排列”(乘2取整法) 例:(0.625)10= (0.101)2 0.625 X 2 1.25 1 X 2 0.5 0 X 2 1.0 1

有关二进制

二进制百科内容来自于: 18世纪德国数理哲学大师莱布尼兹从他的传教士朋友鲍威特寄给他的拉丁文译本《易经》中,读到了八卦的组成结构,惊奇地发现其基本素数(0)(1),即《易经》的阴爻--和__阳爻,其进位制就是二进制,并认为这是世界上数学进制中最先进的。20世纪被称作第三次科技革命的重要标志之一的计算机的发明与应用,其运算模式正是二进制。它不但证明了莱布尼兹的原理是正确的,同时也证明了《易经》数理学是很了不起的。 二进制数 二进制 一、二进制数的表示法 二进制是计算技术中广泛采用的一种数制。二进制数是用0和1两个数码来表示的数。它的基数为2,进位规则是―逢二进一‖,借位规则是―借一当二‖。二进制数也是采用位置计数法,其位权是以2为底的幂。例如二进制数110.11,其权的大小顺序为2^2、2^1、2^0、2^-1、2^-2。对于有n位整数,m位小数的二进制数用加权系数展开式表示,可写为: (a(n-1)a(n-2)…a(-m))2= a(n-1)×2^(n-1)+a(n-2)×2^(n-2)+……+a(1)×2^1+a(0)×2^0+a(-1)×2^(-1)+a(-2)×2^(-2) +……+a(-m)×2^(-m) 二进制数一般可写为:(a(n-1)a(n-2)…a(1)a(0).a(-1)a(-2)…a(-m))2。 注意: 1.式中aj表示第j位的系数,它为0和1中的某一个数。 2.a(n-1)中的(n-1)为下标,输入法无法打出所以用括号括住,避免混淆。 二进制 3.2^2表示2的平方,以此类推。 【例1102】将二进制数111.01写成加权系数的形式。 解:(111.01)2=(1×2^2)+(1×2^1)+(1×2^0)+(0×2^-1)+(1×2^-2)

相关文档
最新文档