计算机中的数据存储

    在计算机中能直接表示和使用的数据有数值数据和字符数据两大类。数值数据用于表示数量的多少,可带有表示数值正负的符号位。日常所使用的十进制数要转换成等值的二进制数才能在计算机中存储和操作。符号数据又叫非数值数据,包括英文字母、汉字、数字、运算符号以及其他专用符号。它们在计算机中也要转换成二进制编码的形式。

关于数制:是用固定的数字和规则表示具体数值的一种规则.

机器数:数值在计算机中的二进制表示,机器数是带符号的。

真值:因为机器数的符号位的,其机器数的表示,并不是真正的数值,真值表示这个机器值所代表的真正值。

原码:符号位+真值的绝对值  ==机器数

反码:负数的反码是在原码的基础上,符号位不变,其余个位取反

补码:负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1,计算机中负数是用补码进行表示的。

3种码制存在的意义:

主要是因为符号为的加减运算问题,为了电路的设计可以简单,1-1=1+(-1),将减法统一为加法。而且在运算中不必考虑符号位,即符号位当作正常的值参加运算。

/**********************************************************************************************
**  以下例子来源:http://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html
/**********************************************************************************************
计算十进制的表达式: 1-1=0
1 - 1 = 1 + (-1) = [00000001]原 + [10000001]原 = [10000010]原 = -2
如果用原码表示, 让符号位也参与计算, 显然对于减法来说, 结果是不正确的.这也就是为何计算机内部不使用原码表示一个数.
为了解决原码做减法的问题, 出现了反码:
计算十进制的表达式: 1-1=0
1 - 1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原= [0000 0001]反 + [1111 1110]反 = [1111 1111]反 = [1000 0000]原 = -0
发现用反码计算减法, 结果的真值部分是正确的. 而唯一的问题其实就出现在"0"这个特殊的数值上. 虽然人们理解上+0和-0是一样的, 但是0带符号是没有任何意义的. 而且会有[0000 0000]原和[1000 0000]原两个编码表示0.
于是补码的出现, 解决了0的符号以及两个编码的问题:
1-1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原 = [0000 0001]补 + [1111 1111]补 = [0000 0000]补=[0000 0000]原
这样0用[0000 0000]表示, 而以前出现问题的-0则不存在了.而且可以用[1000 0000]表示-128:
(-1) + (-127) = [1000 0001]原 + [1111 1111]原 = [1111 1111]补 + [1000 0001]补 = [1000 0000]补
/********************************************************************************************/

反码的意义:

反码只是这种规则的名称,具体的意义应该由背后的规则决定。

:考虑 2 与 -2 : 2+(-2) = 0 ===》

  = 00000010 + 11111101 = 11111111 = -(0)  所以 11111101 = -2 = 10000010

你可能感兴趣的:(计算机中的数据存储)