Coding In C day04

计算机内存可以存放很大量的信息,姑且可以认为只有内存中的信息才是可以直接使用的。计算机中的信息可以划分:



        控制信息
    /
信息                            /定点数
    \                /数值信息
        数据信息            \浮点数
                    \
                        非数值信息
                           /            \
                    字符数据   逻辑数据

计算机中的内存基本存储单元是字节byte,最小存储单元是位bit,8bit组成一个字节。每个字节可以用来表示256个数字。我们之所以对计算机中的数据进行分组,划分数据类型就是因为不同数据占有存储空间不一。

字符类型一般占内存一个字节,因此可以通过数字表示256个不同的字符,256个字符各自对应着一个数字,这数字或者介于-127~127或者介于0-255之间,具体字符所对应的数字取决于编译器。但是一般对于0~127这部分数值和字符的对应关系都是固定的,都是有共识的,这就是ASCII码表。ASCII码表规定了128个字符对应的数字。所以我们说ASCII码表规定了字符到数字之间的对应关系,ASCII码从0~127.这部分对应没有编译器差异。
在C语言中使用char表示字符类型,该类型的字符和数字的对应关系取决于编译器,但是对于0~127这部分数字对应的字符是符合ASCII码规定的。
在C语言中还有unsigned char,叫做无符号字符类型。该类型字符和数字对应关系式固定的,没有编译器差异。当然对于0~127这部分数字对应的字符依然是符合ASCII码规定的。



short叫做短整型类型,一般占有2byte,可以表示65535个数字。
unsigned short叫做无符号短整型,一般占有2byte,可以表示65535个数字,而且全部是无符号数,全是正数,数值范围是[0,65534]

long叫做长整型,一般占有4byte
unsigned long叫做无符号长整型,一般占有4byte

int叫做整型,一般占有4byte
unsigned int叫做无符号整型,一般占有4byte

float叫做单精度浮点数类型,一般占有4byte
double叫做双精度浮点数类型,一般占有8byte
long double叫做高精度浮点类型,一般占有12byte
--->以上说的是一般情况,实际应该视计算机平台而定,例如我的计算机lotus-Laptop用sizeof操作符查看结果如下:
##################################################
int->4
unsigned int->4
unsigned->4
short int->2
short->2
unsigned short int->2
unsigned short->2
long int->4
long->4
unsigned long int->4
unsigned long->4
char->1
unsigned char->1
float->4
double->8
long double->12
##################################################




数值信息分定点数和浮点数。其中定点数也称为整型数,浮点数也称为实型数。

数值信息在机器中的表示:
    数值信息在机器内的表达形式称为"机器数",而"机器数"代表的数值称为此"机器数"的真值。("机器数"采用的二进制编码方法是补码表示方法。)

数值信息在计算机内采用符号数字化处理后,计算机就可以识别和表示数值信息了,为了改进带符号数值的运算方法,人们提出了数值信息的多种二进制编码方法,多种编码方法其实质都是在对负数的表示进行改造,原码、反码和补码就是这样。

原码:符号-绝对值表示的编码,称为原码。
反码:正数的反码表示与原码表示一样。负数的反码的符号位与原码相同,其余各位按位取反。
补码:正数的补码表示与原码表示一样。负数的补码可由该数的反码再加1求得。
--->补码的好处是:(1)零的表示唯一(2)符号位可作为数值参加运算

对于原码、反码和补码我们得出的结论是:
(1)计算机数值信息的"机器数"采用的是补码,这样可以简化带符号数值的运算
(2)正数的反码和补码和原码相同
(3)负数补码计算方法可以总结为对其相反数"按位求反再加一",其实质就是对负数的相反数求相反数。补码的补码就是原码的相反数
(4)补码参与运算的结果依然是补码



##################################################
附:负数补码计算方法"按位求反再加1"其实质就是求相反数,以下是简明推理过程
以-13机器数的推理为例:
-13=?
-13+13=0

******** + 00001101 =  00000000
******** + 00001101 = 100000000
******** = 100000000 - 00001101
******** =  11111111 + 1 - 00001101
******** = 11111111 - 00001101 + 1
******** = 11110010 + 1
******** = 11110011

试求-51的机器码?
-51=?
-51+51=0
******** + 00110011 =  00000000
******** + 00110011 = 100000000
******** = 100000000 - 00110011
******** =  11111111 + 1 - 00110011
******** =  11111111 - 00110011 + 1
******** =             11001100 + 1
******** = 11001101

总结:
若a>0, 那么-a的补码是a的反码再加1。
##################################################


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值