C语言学习(1)关于char
/*******************************************************************************************************
刚开始学习C语言,仅代表自己的学习理解,不代表观点一定正确
只做学习记录
有错误的麻烦指出,谢谢!
*********************************************************************************************************/
char字符型变量在C语言中占用一个字节。由于1字节=8bit,一比特等于一个二进制。
故char得到的二进制为0000 0000 ~ 1111 1111 一共表示256种状态(2^8)
—————————————————————————————————————————
在C语言中char可以表示有符号和无符号两种情况
其中无符号时char取值范围为0~255 地址为0000 0000 - 1111 1111
有符号时 八位二进制的最高位变成符号位,后七位为数据位 正负相加共256种状态
故在有符号的情况下,正数地址为0000 0000 —0111 1111
负数地址为1000 0000 — 1111 1111
而当地址为0000 0000时,表示为0
当地址为1000 0000时,表示为-0,又因为0并没有正负的区别,且满足char所占的1bit,所以C语言规定将值-128赋予1000 0000
当地址为1000 0000时它的值为-128.
所以signed char 的取值范围为-128~127
—————————————————————————————————————————
在C语言编辑软件中,当你输入char = 128时,输出却为-128
char型为什么输入128结果输出-128呢??
由表可以看出

当输入是128时,系统认为输入是一个正数,而正数的补码等于它的原码
则会将128的补码1000 0000储存到你所定义的变量中。
当你要用到它时,系统又会将补码转变回原码输出。
而补码是1000 0000则输出的原码则也是1000 0000,故输出-128