原码补码

计算机中的符号数有三种表示方法,即原码、反码和补码。三种表示方法均有符号位和数值位两部分,数码的第一位为符号位,用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。

posted @ 2021-11-28 10:58  iZJ"Qq4577105  阅读(528)  评论(0编辑  收藏  举报