255二进制制数a*5/255.0怎么解释

二进制数是干什么的?
二进制数是干什么的?
09-09-05 &匿名提问
二进制数的表示法二进制是计算技术中广泛采用的一种数制。二进制数是用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)二、二进制数的加法和乘法运算二进制数的算术运算的基本规律和十进制数的运算十分相似。最常用的是加法运算和乘法运算。1.二进制加法有四种情况:0+0=00+1=11+0=11+1=0进位为1【例1103】求(11)2的和解:1101+1011110002.二进制乘法有四种情况:0×0=01×0=00×1=01×1=1【例1104】求(1110)2乘(101)2之积解:1110×10111100000+11101000110二进制-莱布尼茨的二进制    在德国图灵根著名的郭塔王宫图书馆(SchlossbiliothkezuGotha)保存着一份弥足珍贵的手稿,其标题为:“1与0,一切数字的神奇渊源。这是造物的秘密美妙的典范,因为,一切无非都来自上帝。”这是德国天才大师莱布尼茨(GottfriedWilhelmLeibniz,)的手迹。但是,关于这个神奇美妙的数字系统,莱布尼茨只有几页异常精炼的描述。用现代人熟悉的话,我们可以对二进制作如下的解释:2^0=12^1=22^2=42^3=82^4=162^5=322^6=64  二进制 2^7=128以此类推。把等号右边的数字相加,就可以获得任意一个自然数。我们只需要说明:采用了2的几次方,而舍掉了2几次方。二进制的表述序列都从右边开始,第一位是2的0次方,第二位是2的1次方,第三位时2的2次方……,以此类推。一切采用2的成方的位置,我们就用“1”来标志,一切舍掉2的成方的位置,我们就用“0”来标志。这样,我们就得到了下边这个序列: 2的7次方2的6次方2的5次方002的2次方02的0次方  128+64+32+0+0+4+0+1=229在这个例子中,十进制的数字“229”就可以表述为二进制的“”。任何一个二进制数字最左边的一位都是“1”。通过这个方法,用1到9和0这十个数字表述的整个自然数列都可用0和1两个数字来代替。0与1这两个数字很容易被电子化:有电流就是1;没有电流就是0。这就整个现代计算机技术的根本秘密所在。二进制-莱布尼茨和八卦    这份手稿完成的时候,莱布尼茨五十岁。毫无疑问,他是这个作为现代计算机技术的基础的二进制的发明者。而且,在此之前,或者与他同时,似乎没有一个人想到过这个问题。这在数学史上是很罕见的。莱布尼茨不仅发明了二进制,而且赋予了它宗教的内涵。他在写给当时在中国传教的法国耶稣士会牧师布维(JoachimBouvet,)的信中说:“第一天的伊始是1,也就是上帝。第二天的伊始是2,……到了第七天,一切都有了。所以,这最后的一天也是最完美的。因为,此时世间的一切都已经被创造出来了。因此它被写作‘7’,也就是‘111’(二进制中的111等于十进制的7),而且不包含0。  二进制
只有当我们仅仅用0和1来表达这个数字时,才能理解,为什么第七天才最完美,为什么7是神圣的数字。特别值得注意的是它(第七天)的特征(写作二进制的111)与三位一体的关联。”布维是一位汉学大师,他对中国的介绍是17、18世纪欧洲学界中国热最重要的原因之一。布维是莱布尼茨的好朋友,一直与他保持着频繁的书信往来。莱布尼茨曾将很多布维的文章翻译成德文,发表刊行。恰恰是布维向莱布尼茨介绍了《周易》和八卦的系统,并说明了《周易》在中国文化中的权威地位。八卦是由八个符号组构成的占卜系统,而这些符号分为连续的与间断的横线两种。这两个后来被称为“阴”、“阳”的符号,在莱布尼茨眼中,就是他的二进制的中国翻版。他感到这个来自古老中国文化的符号系统与他的二进制之间的关系实在太明显了,因此断言:二进制乃是具有世界普遍性的、最完美的逻辑语言。另一个可能引起莱布尼茨对八卦的兴趣的人是坦泽尔(WilhelmErnstTentzel),他当时是图灵根大公爵硬币珍藏室的领导,也是莱布尼茨的好友之一。在他主管的这个硬币珍藏中有一枚印有八卦符号的硬币。二进制-八卦与二进制    今天,西方学界已经获得了普遍的共识:八卦与二进制没有直接的关系。首先,中国的数字系统是十进制的。其次,依照我们今天掌握的史料,秦、汉以上,中国还没有--在莱布尼茨的二进制意义上的--“零”的概念。假如说《周易》中系辞的部分讲的阴、阳化生万物就是莱布尼茨所说的0、1为万物之源,这是难以成立的。今本《周易》大概可以分成三个部分,第一是卦,第二是爻,第三是传,即所谓的“十翼”。其中,卦的部分应该是最古老的。从《尚书》、《周礼》、《左传》、《国语》等先秦文献,以及后来的考古发掘,我们对西周初年的龟卜有了初步的认识。但是,对于“易卜”我们几乎没有任何详细可靠的资料。《周易》中的卦也许就是韩宣子所见到的“易象”。无论如何,我们在卦、爻中基本上看不到阴、阳的影子。阴、阳的系统基本上是在《易传》中得到完善的发展与表述的,尽管它的渊源一定早过《易传》。而《易传》显然是十进制的体系。通过《汉书·律历志》的记载,我们不仅可以知道,在《周易》大行于世的时代历算使用的是十进制,而且其中关键数不是1,更不是0,而是2(阴、阳)和3(天、地、人)。  二进制 (相见拙文《儒家对数学几何的热爱》)另外,道哲学体系中的重要概念“无”与莱布尼茨的0没有任何直接关系。罗素在《数理哲学道论》中将“0”解释为:一切没有分子的类的类。这正是莱布尼茨心目中的“零”。而罗素的这个解释正是受到了著名德国语言哲学家弗莱格(GottlobFrege,)的著作GrundlagederArithmetik(《算术基础》)的启发。弗莱格、罗素的数论体系中的“零”换成中国话说,就是一切“无”的总称。而道哲学中的“无”不是却不是很多“无”的总和,而是那一个特定的“无”,是那一个“道”的本质。简单地说,莱布尼茨以来三百年间,西方的科学家与哲学家作过无数的研究,都不能发现二进制与八卦有什么实质性的联系。而在我们中国,秦汉以下,除去利用对八卦特殊的解释建立哲学系统的努力,我们也基本上看不到对它具有说服力的解释。二进制-计算机内部采用二进制的原因    (1)技术实现简单,计算机是由逻辑电路组成,逻辑电路通常只有两个状态,开关的接通与断开,这两种状态正好可以用“1”和“0”表示。(2)简化运算规则:两个二进制数和、积运算组合各有三种,运算规则简单,有利于简化计算机内部结构,提高运算速度。(3)适合逻辑运算:逻辑代数是逻辑运算的理论依据,二进制只有两个数码,正好与逻辑代数中的“真”和“假”相吻合。(4)易于进行转换,二进制与十进制数易于互相转换。二进制-处理数据库二进制数据    我们在使用数据库时,有时会用到图像或其它一些二进制数据,这个时候你们就必须使用getchunk这个方法来从表中获得二进制大对象,我们也可以使用AppendChunk来把数据插入到表中.我们平时来取数据是这样用的!Getdata=rs(&fieldname&)而取二进制就得这样size=rs(&fieldname&).acturalsizegetdata=rs(&fieldname&).getchunk(size)我们从上面看到,我们取二进制数据必须先得到它的大小,然后再搞定它,这个好像是ASP中处理二进制数据的常用方法,我们在获取从客户端传来的所有数据时,也是用的这种方法,嘿嘿大家可要记住O.下面我们也来看看是怎样将二进制数据加入数据库rs(&fieldname&).appendchunkbinarydata一步搞定!另外,使用getchunk和appendchunk将数据一步一步的取出来!下面演示一个取数据的例子!Addsize=2otalsize=rs(&fieldname&).acturalsizeoffsize=0DoWhereoffsizeBinarydata=rs(&fieldname&).getchunk(offsize)data=data&Binarydataoffsize=offsize+addsizeLoop当这个程序运行完毕时,data就是我们取出的数据.二进制-二进制概述以及其发展    进制是逢2进位的进位制,0、1是基本算符;计算机运算基础采用二进制。电脑的基础是二进制,那么,什么是二进制呢,为什么需要二进制呢?在早期设计的机械计算装置中,使用的不是二进制,而是十进制或者其他进制,利用齿轮的不同位置表示不同的数值,这种计算装置可能更加接近人类的思想方式。比如说一个计算设备有十个齿轮,它们级连起来,每一个齿轮有十格,小齿轮转一圈大齿轮走一格。这就是一个简单的十位十进制的数据表示设备了,可以表示0到的数字。配合其他的一些机械设备,这样一个简单的基于齿轮的装置就可以实现简单的十进制加减法了。这种通过不同的位置上面不同的符号表示数值的方法就是进制表示方法。常用的进制主要是十进制(因为我们有十个手指,所以十进制是比较合理的选择,用手指可以表示十个数字,0的概念直到很久以后才出现,所以是1-10而不是0-9)。电子计算机出现以后,使用电子管来表示十种状态过于复杂,所以所有的电子计算机中只有两种基本的状态,开和关。也就是说,  二进制 电子管的两种状态决定了以电子管为基础的电子计算机采用二进制来表示数字和数据。常用的进制还有8进制和16进制,在电脑科学中,经常会用到16进制,而十进制的使用非常少,这是因为16进制和二进制有天然的联系:4个二进制位可以表示从0到15的数字,这刚好是1个16进制位可以表示的数据,也就是说,将二进制转换成16进制只要每4位进行转换就可以了。二进制的“”直接可以转换成16进制的“38”。一个字是电脑中的基本存储单元,根据计算机字长的不同,字具有不同的位数,现代电脑的字长一般是32位的,也就是说,一个字的位数是32。字节是8位的数据单元,一个字节可以表示0-255的数据。对于32位字长的现代电脑,一个字等于4个字节,对于早期的16位的电脑,一个字等于2个字节。
请登录后再发表评论!
二进制主要应用于计算机在数字式计算的发展历程中,一个重大的设计进步是引入了二进制作为内部的数字系统。这种方法避免了那些基于其他数字系统的电子计算机中必须的复杂的进位机制,例如十进制系统。采用二进制的好处是简化了实现算术功能和逻辑运算的设计。 1111111 = 2^6+2^5+2^4+2^3+2^2+2^1+2^0 = 2^7-1 = 127 至于从2进制转换到10进制的方法 就是 如果这个2进制某个位置的数字为1,那么就等于2^(n-1) n表示从右到左第n位.如果是0,那么可以忽略不计,因为 0^(n-1) 还是0 比如 10100 = 2^4+2^2 = 20 11010 = 2^4+2^3+2^1 = 26 希望可以帮助你了解你想了解的知识
请登录后再发表评论!小木虫 --- 500万硕博科研人员喜爱的学术科研平台
&&查看话题
开头为1的二进制数如何转换为十进制数
例如: ,书上说首位是零的话,说明是一个负整数,是这样吗?
该如何转换为十进制?
但是反过来算呢?把-20转换成二进制呢?好像是
这个是我用笔记本上的计算器算的:
为什么反过来算结果不一样呢?
按你所说:()
n=8,从第一位到第七位依次求和(0就省略了):1×2&+1×2¹+1×2³+1×2^5+1×2^6=1+2+8+32+64=107;sgn(a8-0.5)=sgn(1-0.5)=+1
于是(=(+107)10
这样算出来是正数啊?:arm:
而且为什么这样算出来的结果和2楼的结果不一样呢?2楼的那种方法和百度文库上的一样,能回答一下吗?:hand:
对不起,我忘记了,有个+0和-0的问题,
我也忘记怎么处理这两个0了,
至于n进制的就是
∑ n^(i-1)*a_i
比如十进制的32就是10^1*3+10^0*2
其他的进位一样
可以说详细一点吗?没看懂哎。。。
我是说的是负整数,6楼算出的107对吗?
这要和补码的本质说起了,补码是取反加一的结果,用0xff(255)去减可以达到取反的效果,然后加1就是得到原来的数的绝对值了。
谢谢啦:victory::hand:
你看这样算对不?
找到方法了:
(1 1101011)二进制 ,最高位为1,可以确定这是一个负数,最高位为符号位,其他位为数值位,符号位不变,数值位逐个取反得:1 0010100 ,然后加1得:1 0010101 ,再将其按权展开后相加,但是符号位(即最高位)不在转换范围之内,现在将1 0010101从最低位到最高位进行编号,则只算第1、3、5号位的数1,第8位为符号位,则 :
(1 1101011)二进制= -(1 0010101)二进制= -(1×2^0+1×2^2+1×2^4)= -(1+4+16)=-(21)十进制
现在反过来算:将10进制的-21 转换为二进制。
先算其绝对值的二进制数: 21/2......1
& && && && && && && && && && && && && & 10/2......0
& && && && && && && && && && && && && && &5/2......1
& && && && && && && && && && && && && && &2/2......0
& && && && && && && && && && && && && && &1/2......1
& && && && && && && && && && && && && && &0
将余数倒序排列得:10101 补足8位得;
& && &逐位取反得:
& && && && &&&再加1得:。
上面的说法是对的,有一个数是例外的,也就是80H,也就是-128,这个数是需要将符号位也作为数值位的,这个记住了就可以了
研究生必备与500万研究生在线互动!
扫描下载送金币二进制数转换为十进制数
二进制数转换为十进制数
二进制数转换为十进制数
二进制数第0位的权值是2的0次方,第1位的权值是2的1次方……
所以,设有一个二进制数:,转换为10进制为:
下面是竖式:
换算成 十进制
第0位 0 * 20& =& 0
第1位 0 * 21& =& 0
第2位 1 * 22& =& 4
第3位 0 * 23& =& 0
第4位 0 * 24& =& 0
第5位 1 * 25& = 32
第6位 1 * 26& = 64
第7位 0 * 27& =& 0&&&& +
---------------------------
&&&&&&&&&&&&& 100&&
用横式计算为:
0 * 20 + 0 * 21 + 1 * 22 + 1 * 23 + 0 * 24 + 1 * 25 + 1 * 26 + 0 * 27 = 100
0乘以多少都是0,所以我们也可以直接跳过值为0的位:
1 * 22 + 1 * 23 +& 1 * 25 + 1 * 26 = 100
八进制数转换为十进制数
八进制就是逢8进1。
八进制数采用 0~7这八数来表达一个数。
八进制数第0位的权值为8的0次方,第1位权值为8的1次方,第2位权值为8的2次方……
所以,设有一个八进制数:1507,转换为十进制为:
用竖式表示:
1507换算成十进制。
第0位 7 * 80 = 7
第1位 0 * 81 = 0
第2位 5 * 82 = 320
第3位 1 * 83 = 512&& +
--------------------------
&&&&&&&&&&&&& 839
同样,我们也可以用横式直接计算:
7 * 80 + 0 * 81 + 5 * 82 + 1 * 83 = 839
结果是,八进制数 1507 转换成十进制数为 839
八进制数的表达方法
C,C++语言中,如何表达一个八进制数呢?如果这个数是 876,我们可以断定它不是八进制数,因为八进制数中不可能出7以上的阿拉伯数字。但如果这个数是123、是567,或,那么它是八进制数还是10进制数,都有可能。
所以,C,C++规定,一个数如果要指明它采用八进制,必须在它前面加上一个0,如:123是十进制,但0123则表示采用八进制。这就是八进制数在C、C++中的表达方法。
由于C和C++都没有提供二进制数的表达方法,所以,这里所学的八进制是我们学习的,CtC++语言的数值表达的第二种进制法。
现在,对于同样一个数,比如是100,我们在代码中可以用平常的10进制表达,例如在变量初始化时:
int a = 100;
我们也可以这样写:
int a = 0144; //0144是八进制的100;一个10进制数如何转成8进制,我们后面会学到。
千万记住,用八进制表达时,你不能少了最前的那个0。否则计算机会通通当成10进制。不过,有一个地方使用八进制数时,却不能使用加0,那就是我们前面学的用于表达字符的“转义符”表达法。
八进制数在转义符中的使用
我们学过用一个转义符'\'加上一个特殊字母来表示某个字符的方法,如:'\n'表示换行(line),而'\t'表示Tab字符,'\''则表示单引号。今天我们又学习了一种使用转义符的方法:转义符'\'后面接一个八进制数,用于表示ASCII码等于该值的字符。
比如,查一下,我们找到问号字符(?)的ASCII值是63,那么我们可以把它转换为八进值:77,然后用 '\77'来表示'?'。由于是八进制,所以本应写成 '\077',但因为C,C++规定不允许使用斜杠加10进制数来表示字符,所以这里的0可以不写。
事实上我们很少在实际编程中非要用转义符加八进制数来表示一个字符,所以,6.2.4小节的内容,大家仅仅了解就行。
十六进制数转换成十进制数
2进制,用两个阿拉伯数字:0、1;
8进制,用八个阿拉伯数字:0、1、2、3、4、5、6、7;
10进制,用十个阿拉伯数字:0到9;
16进制,用十六个阿拉伯数字……等等,阿拉伯人或说是印度人,只发明了10个数字啊?
16进制就是逢16进1,但我们只有0~9这十个数字,所以我们用A,B,C,D,E,F这五个字母来分别表示10,11,12,13,14,15。字母不区分大小写。
十六进制数的第0位的权值为16的0次方,第1位的权值为16的1次方,第2位的权值为16的2次方……
所以,在第N(N从0开始)位上,如果是是数 X (X 大于等于0,并且X小于等于 15,即:F)表示的大小为 X * 16的N次方。
假设有一个十六进数 2AF5, 那么如何换算成10进制呢?
用竖式计算:
2AF5换算成10进制:
第0位:& 5 * 160 = 5
第1位:& F * 161 = 240
第2位:& A * 162 = 2560
第3位:& 2 * 163 = 8192& +
-------------------------------------
&&&&&&&&&&&&&&&& 10997&
直接计算就是:
5 * 160& + F * 161 + A * 162 + 2 * 163 = 10997
(别忘了,在上面的计算中,A表示10,而F表示15)
现在可以看出,所有进制换算成10进制,关键在于各自的权值不同。
假设有人问你,十进数 1234 为什么是 一千二百三十四?你尽可以给他这么一个算式:
1234 = 1 * 103 + 2 * 102 + 3 * 101 + 4 * 100
& 十六进制数的表达方法
如果不使用特殊的书写形式,16进制数也会和10进制相混。随便一个数:9876,就看不出它是16进制或10进制。
C,C++规定,16进制数必须以 0x开头。比如 0x1表示一个16进制数。而1则表示一个十进制。另外如:0xff,0xFF,0X102A,等等。其中的x也也不区分大小写。(注意:0x中的0是数字0,而不是字母O)
以下是一些用法示例:
int a = 0x100F;
int b = 0x70 +
至此,我们学完了所有进制:10进制,8进制,16进制数的表达方式。最后一点很重要,C/C++中,10进制数有正负之分,比如12表示正12,而-12表示负12,;但8进制和16进制只能用达无符号的正整数,如果你在代码中里:-078,或者写:-0xF2,C,C++并不把它当成一个负数。
十六进制数在转义符中的使用
转义符也可以接一个16进制数来表示一个字符。如在6.2.4小节中说的 '?' 字符,可以有以下表达方式:
'?'&&&& //直接输入字符
'\77'&& //用八进制,此时可以省略开头的0
'\0x3F' //用十六进制
同样,这一小节只用于了解。除了空字符用八进制数 '\0' 表示以外,我们很少用后两种方法表示一个字符。
十进制数转换到二、八、十六进制数
10进制数转换为2进制数
给你一个十进制,比如:6,如果将它转换成二进制数呢?
10进制数转换成二进制数,这是一个连续除2的过程:
把要转换的数,除以2,得到商和余数,
将商继续除以2,直到商为0。最后将所有余数倒序排列,得到数就是转换结果。
听起来有些糊涂?我们结合例子来说明。比如要转换6为二进制数。
“把要转换的数,除以2,得到商和余数”。
&要转换的数是6, 6 ÷ 2,得到商是3,余数是0。 (不要告诉我你不会计算6÷3!)
“将商继续除以2,直到商为0……”
现在商是3,还不是0,所以继续除以2。
那就: 3 ÷ 2, 得到商是1,余数是1。
“将商继续除以2,直到商为0……”
现在商是1,还不是0,所以继续除以2。
那就: 1 ÷ 2, 得到商是0,余数是1 (拿笔纸算一下,1÷2是不是商0余1!)
“将商继续除以2,直到商为0……最后将所有余数倒序排列”
好极!现在商已经是0。
我们三次计算依次得到余数分别是:0、1、1,将所有余数倒序排列,那就是:110了!
6转换成二进制,结果是110。
把上面的一段改成用表格来表示,则为:
(在计算机中,÷用 / 来表示)
如果是在考试时,我们要画这样表还是有点费时间,所更常见的换算过程是使用下图的连除:
请大家对照图,表,及文字说明,并且自已拿笔计算一遍如何将6转换为二进制数。
说了半天,我们的转换结果对吗?二进制数110是6吗?你已经学会如何将二进制数转换成10进制数了,所以请现在就计算一下110换成10进制是否就是6。
10进制数转换为8、16进制数
非常开心,10进制数转换成8进制的方法,和转换为2进制的方法类似,惟一变化:除数由2变成8。
来看一个例子,如何将十进制数120转换成八进制数。
用表格表示:
120转换为8进制,结果为:170。
非常非常开心,10进制数转换成16进制的方法,和转换为2进制的方法类似,惟一变化:除数由2变成16。
同样是120,转换成16进制则为:
120转换为16进制,结果为:78。
请拿笔纸,采用(图:1)的形式,演算上面两个表的过程。
二、十六进制数互相转换
二进制和十六进制的互相转换比较重要。不过这二者的转换却不用计算,每个C,C++程序员都能做到看见二进制数,直接就能转换为十六进制数,反之亦然。
我们也一样,只要学完这一小节,就能做到。
首先我们来看一个二进制数:1111,它是多少呢?
你可能还要这样计算:1 * 20 + 1 * 21 + 1 * 22 + 1 * 23 = 1 * 1 + 1 * 2 + 1 * 4 + 1 * 8 = 15。
然而,由于1111才4位,所以我们必须直接记住它每一位的权值,并且是从高位往低位记,:8、4、2、1。即,最高位的权值为23 = 8,然后依次是 22 = 4,21=2, 20 = 1。
记住8421,对于任意一个4位的二进制数,我们都可以很快算出它对应的10进制值。
下面列出四位二进制数 xxxx 所有可能的值(中间略过部分)
仅4位的2进制数& 快速计算方法&& 十进制值&&&& 十六进值
1111&&&&&&& = 8 + 4 + 2 + 1& = 15&&&&&&&&& F
1110&&&&&&& = 8 + 4 + 2 + 0& = 14&&&&&&&&& E
1101&&&&&&& = 8 + 4 + 0 + 1& = 13&&&&&&&&& D&&&&&&&&&&
1100&&&&&&& = 8 + 4 + 0 + 0& = 12&&&&&&&&& C&&&&&&&&&&
1011&&&&&&& = 8 + 4 + 0 + 1& = 11&&&&&&&&& B&&&&&&&&&&
1010&&&&&&& = 8 + 0 + 2 + 0& = 10&&&&&&&&& A
1001&&&&&&& = 8 + 0 + 0 + 1& = 10&&&&&&&&& 9
0001&&&&&&& = 0 + 0 + 0 + 1& = 1&&&&&&&&&& 1
0000&&&&&&& = 0 + 0 + 0 + 0& = 0&&&&&&&&&& 0
二进制数要转换为十六进制,就是以4位一段,分别转换为十六进制。
如(上行为二制数,下面为对应的十六进制):
&F&&& D&& ,& A&&& 5&& ,& 9&&& B&&
反过来,当我们看到 FD时,如何迅速将它转换为二进制数呢?
看到F,我们需知道它是15(可能你还不熟悉A~F这五个数),然后15如何用8421凑呢?应该是8 + 4 + 2 + 1,所以四位全为1 :1111。
接着转换 D:
看到D,知道它是13,13如何用8421凑呢?应该是:8 + 2 + 1,即:1011。
所以,FD转换为二进制数,为:
由于十六进制转换成二进制相当直接,所以,我们需要将一个十进制数转换成2进制数时,也可以先转换成16进制,然后再转换成2进制。
比如,十进制数 1234转换成二制数,如果要一直除以2,直接得到2进制数,需要计算较多次数。所以我们可以先除以16,得到16进制数:
结果16进制为: 0x4D2
然后我们可直接写出0x4D2的二进制形式: 10。
其中对映关系为:
同样,如果一个二进制数很长,我们需要将它转换成10进制数时,除了前面学过的方法是,我们还可以先将这个二进制转换成16进制,然后再转换为10进制。
下面举例一个int类型的二进制数:
我们按四位一组转换为16进制: 6D E5 AF 1B&&&
原码、反码、补码
结束了各种进制的转换,我们来谈谈另一个话题:原码、反码、补码。
我们已经知道计算机中,所有数据最终都是使用二进制数表达。
我们也已经学会如何将一个10进制数如何转换为二进制数。
不过,我们仍然没有学习一个负数如何用二进制表达。
比如,假设有一 int 类型的数,值为5,那么,我们知道它在计算机中表示为:
5转换成二制是101,不过int类型的数占用4字节(32位),所以前面填了一堆0。
现在想知道,-5在计算机中如何表示?
在计算机中,负数以其正值的补码形式表达。
什么叫补码呢?这得从原码,反码说起。
原码:一个整数,按照绝对值大小转换成的二进制数,称为原码。
是 5的 原码。
反码:将二进制数按位取反,所得的新二进制数称为原二进制数的反码。
取反操作指:原为1,得0;原为0,得1。(1变0; 0变1)
比如:将00 每一位取反,得11 。
反码是相互的,所以也可称:
互为反码。
补码:反码加1称为补码。
也就是说,要得到一个数的补码,先得到反码,然后将反码加上1,所得数称为补码。
的反码是:11 。
那么,补码为:
所以,-5 在计算机中表达为:11 。转换为十六进制:0xFFFFFFFB。
再举一例,我们来看整数-1在计算机中如何表示。
假设这也是一个int类型,那么:
1、先取1的原码:00
2、得反码:&&&& 11
3、得补码:&&&& 11
可见,-1在计算机里用二进制表达就是全1。16进制为:0xFFFFFF。
一切都是纸上说的……说-1在计算机里表达为0xFFFFFF,我能不能亲眼看一看呢?当然可以。利用C++ Builder的调试功能,我们可以看到每个变量的16进制值。
通过调试查看变量的值
下面我们来动手完成一个小小的实验,通过调试,观察变量的值。
我们在代码中声明两个int 变量,并分别初始化为5和-5。然后我们通过CB提供的调试手段,可以查看到程序运行时,这两个变量的十进制值和十六进制值。
首先新建一个控制台工程。加入以下黑体部分(就一行):
//---------------------------------------------------------------------------
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
int main(int argc, char* argv[])
int aaaa = 5, bbbbb = -5;
//---------------------------------------------------------------------------
没有我们熟悉的的那一行:
getchar();
所以,如果全速运行这个程序,将只是DOS窗口一闪而过。不过今天我们将通过设置断点,来使用程序在我们需要的地儿停下来。
设置断点:最常用的调试方法之一,使用程序在运行时,暂停在某一代码位置,
在CB里,设置断点的方法是在某一行代码上按F5或在行首栏内单击鼠标。
在上图中,我们在return 0;这一行上设置断点。断点所在行将被CB以红色显示。
接着,运行程序(F9),程序将在断点处停下来。
(请注意两张图的不同,前面的图是运行之前,后面这张是运行中,左边的箭头表示运行运行到哪一行)
当程序停在断点的时,我们可以观察当前代码片段内,可见的变量。观察变量的方法很多种,这里我们学习使用Debug Inspector (调试期检视),来全面观察一个变量。
以下是调出观察某一变量的 Debug Inspector 窗口的方法:
先确保代码窗口是活动窗口。(用鼠标点一下代码窗口)
按下Ctrl键,然后将鼠标挪到变量 aaaa 上面,你会发现代码中的aaaa变蓝,并且出现下划线,效果如网页中的超链接,而鼠标也变成了小手状:
点击鼠标,将出现变量aaaa的检视窗口:
(笔者使用的操作系统为WindowsXP,窗口的外观与Win9X有所不同)
从该窗口,我可以看到:
aaaa :变量名
int& :变量的数据类型
0012FF88:变量的内存地址,请参看;地址总是使用十六进制表达
5 : 这是变量的值,即aaaa = 5;
0x :同样是变量的值,但采用16进制表示。因为是int类型,所以占用4字节。
首先先关闭前面的用于观察变量aaaa的Debug Inspector窗口。
现在,我们用同样的方法来观察变量bbbb,它的值为-5,负数在计算机中使用补码表示。
正如我们所想,-5的补码为:0xFFFFFFFB。
再按一次F9,程序将从断点继续运行,然后结束。
很难学的一章?
来看看我们主要学了什么:
1)我们学会了如何将二、八、十六进制数转换为十进制数。
三种转换方法是一样的,都是使用乘法。
2)我们学会了如何将十进制数转换为二、八、十六进制数。
方法也都一样,采用除法。
3)我们学会了如何快速的地互换二进制数和十六进制数。
要诀就在于对二进制数按四位一组地转换成十六进制数。
在学习十六进制数后,我们会在很多地方采用十六进制数来替代二进制数。
4)我们学习了原码、反码、补码。
把原码的0变1,1变0,就得到反码。要得到补码,则先得反码,然后加1。
以前我们只知道正整数在计算机里是如何表达,现在我们还知道负数在计算机里使用其绝对值的补码表达。
比如,-5在计算机中如何表达?回答是:5的补码。
5)最后我们在上机实验中,这会了如何设置断点,如何调出Debug Inspector窗口观察变量。
以后我们会学到更多的调试方法。
发表评论:
TA的最新馆藏}

我要回帖

更多关于 255转二进制 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信