牛骨文教育服务平台(让学习变的简单)

Java编程那些事儿8——计算机内部的数据表达

作者:陈跃峰

出自:http://blog.csdn.net/mailbomb

1.3 计算机内部的数据表达

计算机内部数据表达的总原则就是:把一切内容数值化、数字化。这个也是编程时处理数据的基本方式,对于编程理解的越深入,则将越认同该原则。

其实计算机也只能这样,因为计算机内部只能存储0和1两个数字,所以必须把指令、数据、图片、文本等各种各样的内容数字化成0和1进行存储、传输和显示。

1.3.1 整数的表达

整数有正负之分,但是计算机内部只能存储0和1,则计算机内部将符号数字化,用二进制码的最高位代表符号位,规定该位为0代表正,1代表负。这就是符号数字化的规定。

前面介绍过整数在计算机内部都是以二进制的形式保存的。但是为了计算方便,以及简化CPU的结构,所以在存储和运算时都采用补码的形式。

前面介绍的那些直接计算出来的二进制形式,都称作整数的原码。规定正数的原码、反码和补码都是自身。

而对于负数,仔细研究一下其组成格式。以8位机为例,也就是一个数字占计算机中的8位,也就是一个字节,用最高位存储符号位,其它的位存储数值。例如-8的原码是10001000,最高位的1代表负数,后续的7位代表数值。

负数的反码是指符号位不变,其他的位取反,也就是0变1,1变0,则-8的反码是11110111。

负数的补码是指在反码的数值位上加1,运算后得到的结果,只计算数值位,不改变符号位。则-8的补码是11111000,该次运算中,低位向高位进行了进位。

规律:补码的补码等于负数的原码。

也就是对负数的补码再求补,则得到的负数的原码。

熟悉整数的表达,对于后续理解数据的区间以及进行强制转换以后得到的数值很有帮助,也是进行位运算的基础。

备注:小数,编程语言中称浮点数,的存储形式和整数不同。

1.3.2 字符的表达

字符指计算机内部单个的符号,如标点符号、英文字母和汉字等等。因为这些字符种类各异,计算机无法直接表达,那么就采用了计算机编程中也常用的方式,对每个字符进行编号,例如规定a字符编号为97,b字符编号为98等等。

由于需要编号的字符很多,就专门规定了一系列字符和编号的对应规则,那么这些对应表就被称作字符集,常见的字符集有ASCII、GB2312、BIG5等。

在计算机内部存储、运算和传输时,都只需要使用该编号即可。

字符集比较完美的解决了字符的存储和传输的问题。

所以字符在程序内部可以参与运算,其实参与运算的就是这个字符的编号,字符集规律是很多字符变换逻辑实现的基础。

备注:字符的显示则通过专门的字符显示码实现。

1.3.3 总结

其实计算机内部所有的东西都是以数字的形式存储的,这里只是希望通过这两种简单的结构,使大家了解将数据数字化的思想,这是编程时常用的思想之一。