原码、补码说明以及char和unsigned char区别
0、
原码、补码(以及反码)这些概念都是对整数而言的,即原码、补码所表示的实际数值都是整数。而对实数(即带有小数点的数值,如5.0,,5.5)而言,是没有原码、补码(以及反码)这些概念的,即实数不能用原码、补码来表示。
原码,对应表示的是整数中的正整数部分;补码,对应表示的是整数中的负整数部分。
0,无论用原码还是补码表示,其值都是为0(即其原码值为0,其补码值也为0)。
对应能表示整数的数据类型: Int 、char
对应能表示实数的数据类型: float 、double
1、
原码、补码(以及反码)这些概念都是有一个修饰条件的,即几位的原码、几位的补码。例如,8bit的的原码,8bit的补码,32bit的的原码,32bit的补码。
只有定下了几位,补码和补码,补码和原码间才可以(直接)进行加减乘除的运算(而不必转码再运算)。
例如,8bit的补码0XFF(即-1)加上8bit的补码0XFF(即-1):0XFF+0XFF=0X1FE,由于所得的结果即0X1FE,CPU依旧用8bit的存储空间(寄存器变量)存储,所以在该存储空间里的值为0XFE,即-2.即运算结果是正确的。
再例如,8bit的补码0XFF(即-1)加上8bit的原码0X01(即1):0XFF+0X01=0X100,由于所得的结果即0X1FE,CPU依旧用8bit的存储空间(寄存器变量)存储,所以在该存储空间里的值为0XFE,即-2.即运算结果是正确的。存储空间里的值为0XFE,即-2.即运算结果是正确的。
中间运算结果
还有,补码和补码,补码和原码间运算的前提是这些相互加减乘除的补码和原码的位数是要一样的。
2、补码=反码+1