原码是将输入端输入的整数数据转化成的二进制数;反码是在源码的基础上保持符号位不变,其它各位取反;补码是在反码的基础上+1。同时,正整数原码、反码、补码均相同,负数则需要经过上述的变化。
eg.输入数据-10
原码:1000 0000 0000 0000 0000 0000 0000 1010
反码:1111 1111 1111 1111 1111 1111 1111 0101
补码:1111 1111 1111 1111 1111 1111 1111 0110
接下来说一下有符号char输入数据后,原码、反码、补码对最后输出的影响。
eg.键入数据200
电脑中先存为int整数型,计算机所存补码具体为:0000 0000 0000 0000 0000 0000 1100 1000。其中最高位的0表示符号为正。
随后截取后八位存为char类型,即补码为:1100 1000
反码:1100 0111
原码:1011 1000
计算机内存中存的是补码,在有符号类型中,最高位被计算机用作储存符号,0代表正,1代表负。因此在上面的例子中,计算机最后输出的为原码,最后原码解释为了32+16+8=56,最高位被解释为-1,结果为-56,最开始输入的200被错误解释为了-56。
如果是无符号char类型,截取后原码反码补码均相同,结果就会是正常的200。