signed char的取值范围,在内存中的存储形式

来源:互联网 发布:淘宝店卖家信誉等级表 编辑:程序博客网 时间:2024/06/05 15:10

一直不明白signed char的取值范围为什么是-128~127, 在网上看了些信息后,在此做一个个人小结:

在内存中,数据的存储形式都是以补码的形式存放的。

计算机中的符号数有三种表示方法,即原码、反码和补码。三种表示方法均有符号位数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位,三种表示方法各不相同。

先看看原码,反码,补码定义:

原码:数值前面增加了一位符号位(即最高位为符号位)在符号位上用"0"表示正数;用"1"表示负数。数值位表示真值的绝对值

反码:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外

补码:正数的补码与其原码相同,负数的补码为符号位为1,其余位为该数绝对值的原码按位取反,然后加1(也就是其反码加1,符号位除外)

以8为例:

原码:00001000 (符号位为0)

反码:00001000 

补码:00001000

所以,正数的原码,反码,补码都是一样的,不变

以-8为例:

原码:10001000 (符号位为1)

反码:11110111

补码:11111000


为什么signed char取值范围是-128~127 ???

其最大正数在内存中的形式为

01111111

也就是数值127


最小负数是多少呢?

首先我想到的是:

11111111

但是将其转为原码为:

10000001 其值是 -1

然后,我再想到是不是这个:

10000000

将其转为原码为:

110000000 其值是 -128

这样就对了,原码是超出了8位,但在内存中数据的存储形式是补码

内存中10000000表示的就是-128,8位数据的最小值


以上是个人理解,如有错误望指出!
0 0
原创粉丝点击