5795|10

63

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

switch()问题 [复制链接]

#include
#include
main()
{  SCON=0x50;
  TMOD|=0x20;
  TH1=0xf3;
  TR1=1;
  TI=1;
  
  switch(1)
  {
    case 1: printf("%d\n",1);
    case 2: printf("%d\n",2);   
    case 3: printf("%d\n",3);       
   default: printf("%d\n",6);  
  }
  printf("right");
  while (1)        {};

}
怎么打印的时候不是打印1
                   2
                   3
                   6
                   right

而是256
   512
   768
   153 6
   right

最新回复

谢谢各位的指点  详情 回复 发表于 2008-7-16 10:35
点赞 关注

回复
举报

65

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
这和你的写法错误与你的计算机有关。

一般计算机是little endian的

那么1在pc的存储方式就是   00000001 00000000 000000 00000000

在单片机下只能读前两位,所以变成256了.

同理: 512  =  0x(00000010 00000000 000000 00000000)

768 = 256 + 256 = 0x(00000011 00000000 000000 00000000)
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
引用 1 楼 fohonet 的回复:
这和你的写法错误与你的计算机有关。

一般计算机是little endian的

那么1在pc的存储方式就是  00000001 00000000 000000 00000000

在单片机下只能读前两位,所以变成256了.

同理: 512  =  0x(00000010 00000000 000000 00000000)

768 = 256 + 256 = 0x(00000011 00000000 000000 00000000)


您的意思是 1在1在pc的存储方式就是  00000001 00000000 000000 00000000

我想进一不问问  前面的那八位是低字节地址吗?

谢谢

非常感谢

 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

4
 
?
 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

5
 
不是地址,是数据在pc中存储的方式,一个int型占四位

引用 2 楼 Jerrylearnc 的回复:
引用 1 楼 fohonet 的回复:
这和你的写法错误与你的计算机有关。

一般计算机是little endian的

那么1在pc的存储方式就是  00000001 00000000 000000 00000000

在单片机下只能读前两位,所以变成256了.

同理: 512  =  0x(00000010 00000000 000000 00000000)

768 = 256 + 256 = 0x(00000011 00000000 000000 00000000)


您的意思是 1在1在pc的存储方式就是  00000001 00000000 000000 00000000

我…
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

6
 
为什么用printf("%d",1);呢?
如果想输出1,那就直接printf("1");就行了
用%d之类的,是为了输出变量的值。比如 printf("%d", x);//x是一个变量,需要输出其值
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

7
 
这程序还值得讨论?
switch(1),是干嘛?不懂……
没有一个cacse后加break,还是不懂……
讨论个啥子么!
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

8
 
2个问题
1. int不是16个bit吗,二楼怎么写了32bit
2. 51里面默认是big endian吗?
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

9
 
int占4字节
short占2字节
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

10
 
int 可以是2个字节或是4个字节.
short可以是2个字节或是4个字节,这个和实现有关,也就是和编译器以及CPU架构有关.
C语言标准的原文是 short int"至少"16位,long int 至少32位,缺省的int是16还是32位或是其他值都是编译器设计者决定的,所以即使数显一个24位的int,也是符合C语言标准的.
在嵌入式领域,16和32的int都很常见,一定要读你所用的编译器说明书和CPU的datasheet!!

楼主的问题就是数据存储大小头的问题,如果做嵌入式,因为涉及的CPU架构比较多,一定要读CPU的datasheet和uer manual.
另外楼主的C程序风格真的不好.printf("1")是安全的写法.printf("%d",1)中的1的数据类型是有可能不确定的,会引入bug,
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

11
 
谢谢各位的指点
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表