首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

在keil编程中int跟char的差别?该如何解决

2012-03-31 
在keil编程中int跟char的差别???请问大家 int能储存十六位的数吗?如:我这么定义inta0;执行语句a0x90;我

在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

热点排行