注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

风雨夜归人

专业收集资料,个人爱好!

 
 
 

日志

 
 

关于电脑中数据的一些常识  

2009-05-19 12:16:15|  分类: CCB的教程 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
如果你是高手,可以不用继续看下去,因为这是针对一些对数据类型还不太熟悉的朋友,我想希望他们看了这些简单的介绍之后会在以后对游戏的分析之类的场合会对游戏工具里面的那些十六进制数据不会一头雾水。不知道能不能写完,反正能写多少算多少,写不完回家再补。

(一)
我们人类习惯于用十进制,而电脑唯一能“看”得懂的是二进制,为了分析数据的方便,引入了十六进制,其实只是表示方法的不同,不管用哪一种方式来表示,数值是不会变的。

十进制:用0-9共十个数字表示,逢十进一。
二进制:只有0和1两种数字,或者说两种状态。逢二进一,这也是二进制的名称的由来。
十六进制:逢十六进一,为了表示十六种不同的状态,所以除了0-9之外,再引入英文字母前六个,即ABCDEF,一共十六个数字。

三种表示方式的比较(以0-16为例):

二进制   十进制   十六进制
0000     0         0
0001     1         1
0010     2         2
0011     3         3
0100     4         4
0101     5         5
0110     6         6
0111     7         7
1000     8         8
1001     9         9
1010     10       A
1011     11       B
1100     12       C
1101     13       D
1110     14       E
1111     15       F
10000     16       10
…………

(二)
在电脑中,储存的最小单位叫“位”或“二进制位”,英文叫BIT,一个0或1所代表的就是一个位。而一般使用的单位是字节,即BYTE,一个字节由八个二进制位组成。

一个字节,可以表示0-255种不同,或者也可以说,一个字节所能表示的,最小是0,最大是255,以二进制表示,是00000000-11111111,以十进制表示是0-255,而一个字节,用十六进制表示时,一般是用两个数字,所以一个字节以十六进制表示时,是00-FF。

但在电脑中,还有“无符号数”和“有符号数”之分,其实在内存中,两者是没区别是,看程序代码对它怎样对待而不同。例如上面所说的,一个字节当做为无符号数看待时,是表示0-255,但如果做为有符号数看待时,此时最高一位(最左边一个BIT),并不参与表示数值的大小,而只是用来表示这个数字的正负,叫符号位,而剩下的七个BIT,才用来表示数值的大小,七个BIT能表示的数值是范围是0-127,即128种变化,而前面符号位有0和1两种不同,所以当一个字节当做有符号数来看待时,表示的范围是-127至127,比如 10000001 这个二进制数,当做为无符号数时,它是表示129,而当做为有符号数时,此时最左边一个BIT是1,即表示此数字为负数,而剩下的七个BIT即0000001,表示的是1,所以10000001当做为有符号数时,是表示-1。

(三)
上面讲这些好象对游戏的分析没什么联系,其实这些都是要懂的,为什么呢?有时一些数值在游戏中有正负数之分的,例如当年改大富翁二的时候,找到钱的地址了,因为太贪心,改得太大了结果再赚一点钱的时候,却变成负数了,这叫“溢出”,OVERFLOW。比如,以一个字节为例,当游戏把它当成有符号数来表示时,到了01111111,本来是127,如果再加2,就变成10000001了,你以为是129,但因为游戏是把它当成有符号数对待的,所以游戏会显示你的数值是-1了:)

之所以要说这些,是有时在修改数值的时候,不要太狠,一下把它改成FF,这样有时会适得其反。

(四)
一般游戏表示数值,除非是一些上限很小的数值才会用一个BYTE来表示,否则会用2 BYTE或4 BYTE来表示,主要看数值的上限。到目前为止,说的都是整数,但有时游戏里面有一些数值不一定是整数,还有可能是小数,这些就是浮点数了,所以在一些游戏工具中,搜索的数据类型可以看到BYTE,2 BYTES,4 BYTES,FLOATING等的差别。

(五)
数据在内存中存放的规律,一般来说,多于一个字节的数值,在内存中是低位在前,高位在后的,比如,以十六进制来讲,02FF这个数,在内存中是这样存放的:FF 02,所以如果要换算,也要前后倒置后再换算,即你在内存中看到FF 02,其实是表示02FF,换算成十进制是767。同样,其实021版飞天的数据,应该是00 40 9F 40,而它表示的数值即是409F4000,换算成十进制就是1084178432。

(六)
其实,在电脑内存里面,只是一些二进制位,而这些数据,有时是表示电脑的指令,有时是表示游戏用到的数值,有时是表示一个字母或一个字串,这在电脑上本来是没有区别的,例如75这个十六进制数,当它做为一个指令时,是一个JNZ,(关于一些常用的汇编指令,将在下一课来讲),就是非零跳转,当它做为一个数值时,它是表示十进制的117,而当它做为一个字符时,它是表示ASCII码117,即字母“u”。

(七)

好了,关于数据方面的常识,基本上就说这些,我想现在大家应该不会对这些数据感到无头绪了吧?另外,如果你不知道怎样换算不同的数据类型,其实大家电脑上都有现成的工具,不管是WIN98还是WIN2K还是XP,只要打开附件里面的计算器,在“查看”菜单里面选择“科学型”,就能进行二进制,十进制和十六进制的互相换算了。另外还有一个简单的把十进制数换成ASCII码的方法,就是打开记事本,按住ALT然后在小键盘上输入十进制数值,就会出现相应的ASCII字符了,上面的117=u,就是在记事本中,按住ALT然后在小键盘上输入117,字母u就出来了。

  评论这张
 
阅读(181)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017