标题：机器数
机器数的定义
通常，机器数是把符号"数字化"的数,是数字在计算机中的二进制表示形式。
机器数的特点
机器数有两个基本特点：
一：   
数的符号数值化。实用的数据有正数和负数，由于计算机内部的硬件只能表示两种物理状态（用0和1表示），因此实用数据的正号“+”或负号“-”，在机器里就用一位二进制的0或1来区别。通常这个符号放在二进制数的最高位，称符号位，以0代表符号“+”，以1代表符号“-”。因为有符号占据一位，数的形式值就不等于真正的数值，带符号位的机器数对应的数值称为机器数的真值。 例如二进制真值数-011011，它的机器数为 1011011。 
二：     
二进制的位数受机器设备的限制。机器内部设备一次能表示的二进制位数叫机器的字长，一台机器的字长是固定的。字长8位叫一个字节（Byte），现在机器字长一般都是字节的整数倍，如字长8位、16位、32位、64位。
机器数的分类
根据小数点位置固定与否，机器数又可以分为定点数和浮点数。 通常，使用定点数表示整数，而用浮点数表示实数。整理如下：
（1）
整数。认为整数没有小数部分，小数点固定在数的最右边。整数可以分为无符号整数和有符号整数两类。无符号整数的所有二进制位全部用来表示数值的大小；有符号整数用最高位表示数的正负号，而其他位表示数值的大小。例如十进制整数-65的计算机内表示可以是11000001。
（2）
实数。实数的浮点数表示方法是：把一个实数的范围和精度分别用阶码和尾数来表示。在计算机中，为了提高数据表示精度，必须唯一地表示小数点的位置，因此规定浮点数必须写成规范化的形式，即当尾数不为0时，其绝对值大于或者等于0.5且小于1（注：因为是二进制数，要求尾数的第1位必须是1）.例如设机器字长为16位，尾数为8位，阶码为6位，则二进制实数-1101.010的机内表示为0000100111010100。
3  机器数与真值          不带符号的数是数的绝对值，在绝对值前加上表示正负的符号就成了符号数。直接用正号“+”和负号“-”来表示其正负的二进制数叫做符号数的真值。在计算机中不仅用0，1编码的形式表示一个数的数值部分，正、负号亦同样用0，1编码表示。把符号数值化以后，就能将它用于机器中。我们把一个数在机器内的表示形式称为机器数。而这个数本身就是该机器数的真值。“01101”和“11101”是两个机器数，而它们的真值分别为+1101和-1101。
机器数的原码、反码和补码三种形式
4.1 原码
将数的真值形式中“+”号用“0”表示，“-”号用“1”表示时，叫做数的原码形式，简称原码。若字长为n位，原码一般可表示为：
（1）当X为正数时[X]原和X一样，即[X]原 = X。当X为负数时 。由于X本身为负数，所以，实际上是将∣X∣数值部分绝对值前面的符号位上写成“1”即可。
原码表示法比较直观，它的数值部分就是该数的绝对值，而且与真值、十进制数的转换十分方便。但是它的加减法运算较复杂。当两数相加时，机器要首先判断两数的符号是否相同，如果相同则两数相加，若符号不同，则两数相减。在做减法前，还要判断两数绝对值的大小，然后用大数减去小数，最后再确定差的符号，换言之，用这样一种直接的形式进行加运算时，负数的符号位不能与其数值部分一道参加运算，而必须利用单独的线路确定和的符号位。要实现这些操作，电路就很复杂，这显然是不经济实用的。为了减少设备，解决机器内负数的符号位参加运算的问题，总是将减法运算变成加法运算，也就引进了反码和补码这两种机器数。
4.2 反码
如前所述，为了克服原码运算的缺点，采用机器数的反码和补码表示法。若字长为n位，反码可表示为：
（2）即对正数来说，其反码和原码的形式相同；对负数来说，反码为其原码的数值部分各位变反。
4.3 补码
补码是根据同余的概念引入的，我们来看一个减法通过加法来实现的例子。假定现在是北京时间6点整，有一只手表却是8点整，比北京时间快了2小时，校准的方法有两种，一种是倒拨2小时，一种是正拨10小时。若规定倒拨是做减法，正拨是做加法，那么对手表来讲减2与加10是等价的，也就是说减2可以用加10来实现。这是因为8加10等于18，然而手表最大只能指示12，当大于12时12自然丢失，18减去12就只剩6了。这说明减法在一定条件下，是可以用加法来代替的。这里“12”称为“模”，10称为“-2”对模12的补数。推广到一般则有：
A – B = A + ( – B + M ) = A + ( – B )补 
（3）可见，在模为M的条件下，A减去B，可以用A加上-B的补数来实现。这里模(module)可视为计数器的容量，对上述手表的例子，模为12。在计算机中其部件都有固定的位数，若位数为n，则计数值为 ，亦即计数器容量为 ，因此计算机中的补码是以“ ”为模，其定义如下：
（4）简言之，对正数来说，其补码和原码的形式相同；而从（3）式和（4）式可以看出，对于负数，补码为其反码的末位加1。
总之，正数的原码、反码和补码是完全相同的；负数的原码、反码和补码其形式各不相同。另外，特别要注意的是，对于负数的反码和补码（即符号位为1的数），其符号位后边的几位数表示的并不是此数的数值。如果要想知道此数的大小，一定要求其反码或补码才行。
机器数反码、补码的算术运算
5.1 反码的算术运算
反码运算要注意的问题：
1.反码运算时，其符号位与数值一起参加运算。
2.反码的符号位相加后，如果有进位出现，则要把它送回到最低位去相加（循环进位）。
3.用反码运算，其运算结果亦为反码。在转换为真值时，若符号位为0，数位不变；若符号位为1，应将结果求反才是其真值。
[例1]  已知X = + 1101 , Y = + 0110 , 用反码计算Z = X-Y。
解： [X]反 = 01101，[-Y]反 = 11001，则[Z]反 =[X]反+[-Y]反 = 01101+11001+1（循环进位）= 00111 , 其真值为Z = +0111。
[例2]  已知X = + 0110 , Y = + 1101 , 用反码计算Z = X-Y。
解： [X]反 = 00110，[-Y]反 = 10010，则[Z]反 =[X]反+[-Y]反 = 00110 + 10010
= 11000 , 其真值为Z = - 0111。
采用反码运算较好的解决了原码运算所遇到的困难或问题，但由于循环进位需要二次算术相加，延长了计算时间，这同样给电路带来麻烦。而采用下述的补码运算则可避免循环进位的两次计算，同时，采用补码运算对溢出的判断也较采用反码简单的多，所以现在机器中的算术运算普遍采用补码运算。
5.2 .1补码的算术运算
补码运算要注意的问题：
1.补码运算时，其符号位与数值部分一起参加运算。
2.补码的符号位相加后，如果有进位出现，要把这个进位舍去（自然丢失）。
3.用补码运算，其运算结果亦为补码。在转换为真值时，若符号位为0，数位不变；若符号位为1，应将结果求补才是其真值。
[例3]  已知X = + 1101 , Y = + 0110 , 用补码计算Z = X-Y。
解： [X]补 = 01101，[-Y]补 = 11010，则[Z]补 =[X]补+[-Y]补 = 01101+11010 
= 100111 , 其真值为Z = + 0111。
[例4]  已知X = + 0110 , Y = + 1101 , 用补码计算Z = X-Y。
解： [X]补 = 00110，[-Y]补 = 10011，则[Z]补 =[X]补+[-Y]补 = 00110 + 10011
= 11001 , 其真值为Z = - 0111。
5.2.2 溢出及补码溢出的判断
无论采用何种机器数，只要运算的结果大于数值设备所能表示数的范围，就会产生溢出。  溢出现象应当作一种故障来处理，因为它使结果数发生错误。异号两数相加时，实际是两数的绝对值相减，不可能产生溢出，但有可能出现正常进位；同号两数相加时，实际上是两数的绝对值相加，既可能产生溢出，也可能出现正常进位。
由于补码运算存在符号位进位自然丢失而运算结果正确的问题，因此，应区分补码的溢出与正常进位。
[例5] 某数字设备用五位二进制表示数，计算  
（1）9+3  （2）-9-3  （3）9+12  （4）-9-12
解：（1）[+9]补+[+3]补= 01001+ 00011 = 01100 = +12 正确；
（2）[-9]补+[-3]补= 10111+ 11101 = 110100 = 10100（符号位进位自然丢失），其真值为-1100 = -12正确；
（3）[+9]补+[12]补= 01001 + 01100 = 10101 其真值为-1011 =-11错误，产生了溢出；
（4）[-9]补+[-12]补 = 10111+10100 = 101011 其真值为01011= +11 错误，产生了溢出。
（1）、（2）两题结果均正确，查其最高位和次高位的进位位，不是均无进位产生，就是均产生进位；（3）、（4）两题结果均错误，查其最高位和次高位的进位位，只有一位产生了进位。此即为判断机器是正常进位还是溢出的基本依据，在微型机中可用异或电路来实现上述的判断。