例:char a=200; printf("%d",a);
问:a会显示多少。
答案显然不是200,因为char能表达的数字在-128到127之间,200显然超出。
为了方便下面的探讨,这里要先介绍几个概念。
1.无符号数和有符号数。
有符号数:如char ,int定义的数,可以表达负数。
无符号数:如usigned,unsigend cahr 定义的数,只能表达正数。
举一个用char定义的数a,它在内存中表现为:1111 1111
因为a是一个有符号数,所以它的最高位是一个符号位,(有符号数的最高位就是符号位),符号位为1表示-号,为0表示+号。
所以可以它是一个负数,表示-1。至于为什么是-1,下面讲到原码和补码再讲。
如果a的类型不是char而是unsigned char ,它就是无符号数。此时就不存在符号位,那么正常转化为十进制数,就是255。
2.原码,反码和补码
为什么要提原码和补码,因为在计算机内存中,所有的二进制数都是以补码形式存在的。
比如你定义了一个数:char a=1;<