在keil编程中int跟char的差别???
请问大家 int能储存十六位的数吗?
如:
我这么定义
int a=0;
执行语句 a=0x90;
我再定义
char b=0;
b=0x90;
这样的话
a和b的值是否一样呢?
个人觉得没差别不是嘛?就是int更占用空间而已不是?
PS{
我在做实验过程中发现了这样的现象。 首先pcf8591这个芯片是i2c总线。
http://blog.csdn.net/neolone/article/details/6639266
这是他写的关于pcf8591DA的帖子。
然后我自己按照自己的思路写了程序,程序跟他写的差不多,但唯一的不同是他用的是char我用的是int。。。
然后我的程序单片机就不懂了。。
为啥???我的是八位的89c52。
}
[解决办法]
int更占用空间而已
[解决办法]
可以用sizeof 检测下
[解决办法]
看了那个帖子你的问题。是的,此处是不一样的。
8位变量,左移操作最高位(就是bit7)移除后进入CY,16位变量的bit7移位后就到了bit8位置。。。所以你的cy得不到正确的值。
那么下面写的位就都是错误的。
具体的过程,你可以看汇编后的程序。
[解决办法]
keil C51中int是16位的
[解决办法]
int不只是更占空间而已,
int在KEIL C51中可以表达16BIT的带符号数,范围是-32768~32767
char型可以表达8bit的带符号数,范围是-128~127
这两种类型虽然在某些情况下可以一样用,比如
for(int i=0; i<127; i++)与
for(char i=0; i<127; i++)基本上是一样的
但 for(int i=0; i<128; i++)与for(char i=0; i<128; i++)确完全不一样
后者是一个死循环。
对于
int val = 运算式;
和
char val = 运算式;
来说,当运算式(包括加减乘除和移位运算)的值范围超出-128~127时二者就是不样的
[解决办法]
明天到办公室的电脑给楼主测试一下去
[解决办法]
注意使用范围吧 char -128到+127 int 是16位 -32768~32767
[解决办法]
注意使用范围吧 char -128到+127 int 是16位 -32768~32767