在C51编程中,使用的最多就是整型数据,我们今天讨论一下char,以及修饰符unsigned 。
char 型数据的存储空间是8bit位,最高位是符号位。我们就知道他的表达数据范围-128-127之间。也就是小于-128的整型数据与大于127的整型数据超过了char型数据的表示范围。是不能表示的。
我通过简单代码验证一下:
char x=120;
x=x+10;
printf("x=%i",x);
这段代码的输出会输出x=130吗?不会的,在VC中输出了x=-126.所以在程序设计时声明变量使用时一定要注意到变量表表达的范围。下面我们分析一下出错的原因。
120+10=130,130的二进制表示1000,0010。最高为是1表示复数。好像与-126没什么关系。我们来看看126的补码,126的二进制数据是0111,1110。按位取反1000,0010,加1。也就是整型数据的复数是按照补码存储的。这是上溢出,自己动手可以试验一下下溢出。看看结果会不会出错。
ungsigned char 是8位无符号char型数据,符号位也可以用来存储数据,这就可以最大存储255的值,最小0.也就值的范围是0~255.这在单片机编程中非常有用。因为单片机的IO寄存器基本都是8位。如果需要向某个寄存器赋值,使用这种数据结构刚合适。比如:
unsigned char x=0xaa;
P1 = x;
我们改写一下前一段代码
unsigned char x=120;
x=x+10;
printf("x=%i",x);
在VC中输出准确结果x=130.
在自然界中有些值不可能是负值,比如树上的苹果。所以选择 unsigned char 数据比较合适。比如人的年龄,使用char数据来表示可能会出错的,因为127岁以上人也许有。但是255岁以上的人也许没有。
了解char数据,我们只要明白char数据存储空间即可!
文章评论(0条评论)
登录后参与讨论