原码补码
计算机中的符号数有三种表示方法,即原码、反码和补码。三种表示方法均有符号位和数值位两部分,数码的第一位为符号位,用0表示“正”,用1表示“负”,而数值位,三种表示方法各不相同。
作用:表示和存储数值
C语言编译系统分配给各种类型数据字节是不同的,如Turbo C 2.0为每一个整型数据分配2个字节(16个二进位),而Visual C++为每一个整型数据分配4个字节(32位)。
求给定数值的补码反码:
正数的反码、补码、原码都是一样的;
负数的补码,是对其原码逐位取反,但符号位除外;然后整个数加1。
负数的反码,是对原码数值部分按位取反。
e.g:
例1:
求-7的补码,+9的补码。
因为给定数是负数,则符号位为"1"。
后七位:-7的原码(10000111)→按位取反(11111000)(负数符号位不变)→加1(11111001)
所以-7的补码是11111001。附:+9的补码是00001001。
例2:
[+7]反= 0 0000111 B
[-7]反= 1 1111000 B
补码求原码
已知一个数的补码,求原码的操作其实就是对该补码再求补码:
⑴如果补码的符号位为“0”,表示是一个正数,其原码就是补码。
⑵如果补码的符号位为“1”,表示是一个负数,那么求给定的这个补码的补码就是要求的原码。
例:已知一个补码为11111001,求其原码。
因为符号位为“1”,表示是一个负数。首先符号位不变,另外几位都取反后为0000110;再加1,所以是10000111(-7)。
附:如果给整型变量分配2个字节,则在存储单元中能存放的最大值为01111111 11111111,第1位为0代表正数,后面15位全为1,此数值是十进制2^15-1=32767。最小数是10000000 00000000,此数是-2^15,即-32768。因此一个整型变量的值范围是-32768~32767。超过此范围,就会出现数值的“溢出”,输出的结果就会乱或者不准确。如果给整型变量分配4个字节,其能容纳的数值范围为-2^31~2^31-1,即-2147483648到2147483647。