现代计算机的存储和处理的信息以二值信号来表示,这些用0和1来表示的二进制数字,形成了数字革命的基础。对于有10个手指的人类来说,使用十进制表示法是很自然的事情,但是对构造存储和处理信息的机器来说,二进制工作得更好。
二值信号可以很容易地被表示、存储和传输。例如,可以表示为穿孔卡片上有洞或无洞、导线上的高电压或低电压,或者顺时针或逆时针的磁场。
对于二值信号进行存储和执行计算的电子电路非常简单可靠,制造商能够在一个单独的硅片上集成数百万甚至数十亿个这样的电路。
大多数计算机使用8位的块(字节,byte),作为最小的可寻址的内存单位,而不是访问内存中单独的位。
一个字节由8位组成,用二进制表示,它的值域是 0000 0000 ~ 1111 1111;用十进制表示,它的值域是 0 ~ 255。
可以看出,用二进制表示法太冗长,而十进制表示法与位模式的互相转换很麻烦,替代的方法是以16为基数,即十六进制(hexadecimal)。
十六进制用数字 0 ~ 9 及字符 A ~ F 来表示 0 ~ 15 这16个值。十六进制和二进制、十进制的对应关系如下图所示。
可以看到,十六进制和二进制之间的转换比较简单直接。因此,一个字节常用十六进制表示,它的值域是 00 ~ FF。
在C语言中,以0x或0X开头的数字常量被认为是十六进制的值。比如给定一个十六进制表示的数字:0x173A4C,转为二进制则为:
反过来,如果给定一个二进制数字,可以通过把它分为每4位一组来转换为十六进制。需要注意的是,如果总位数不是4的倍数,最左边的一组可以少于4位,前面用0补齐。
计算机中为什么采用二进制?而平时采用十六进制?
因为二进制是在电路中最好控制的,只有1和0两种状态,如果更多进制的话真不知电脑能怎么运行了.在电脑中如果只是用一位位二进制来储存数据会比较麻烦,例如要储存一个整数15,要用四位二进制,200又要用8位二进制.那读取时这个数到底时多少位二进制呢.所以产生了字节,并规定8位进制数为一个字节,一个字节可表示0-255,一共256个数.如果储存的数大于255可以用两个字节表示.
这时如果十六进制来表示字节又会比十进制方便很多.因为用两位十六进制刚好可以表示一个字节,例如F0二进制就是11110000.高位十六进制和低位十六进制又刚好分别对应二进制中的前四位和后四位.
为什么计算机要采用二进制数学习十六进制数的目的
二进制是机器编码。象一个开关一样。1和0表示着一个通一个断,8个1和0表达成一个ASCII字符,做为机器语言,这个2进制的编码是冗长而枯燥的,16进制对于一些高级一点的编程语言来说更方便,例如字节(byte),每一个字符都代表着8个bit(1或0)。由于数据在计算机中最终以二进制的形式存在,所以二进制可以更直观地解决问题。但,二进制数太长了。比如数字100,用二进制数表达将是:0000
0000
0000
0000
0110
0100
面对这么长的数进行思考或操作,没有人会喜欢。因此,高级编程语言里不会也不太可能提供在代码直接写二进制数的方法,而是采用16进制或8进制。因为,进制越大,数的表达长度也就越短。2、8、16,分别是2的1次方,3次方,4次方。这一点使得三种进制之间可以非常直接地互相转换。8进制或16进制缩短了二进制数,但保持了二进制数的表达特点选择十六进制,是因为8位二进制的数字可以方便的转换为2个十六进制的数字。一个字节能且只能由一对十六进制来表示,如果使用4进制的话则需要使用4个数字来表示一个字节,不够简洁;使用8进制的话,最靠左的8进制数是由2位二进制数字来表示的,相比于使用16进制有些美中不足。