5096|16

118

帖子

0

TA的资源

五彩晶圆(中级)

楼主
 

数据类型转换的问题 [复制链接]

double total_num;
unsigned char num_bit[16],i;

for(i=0;i<16;i++)
{
  num_bit= (unsigned char) total_num%10;
  total_num=total_num/10;
}
当我给total_num赋值为1111111111111111时
输出num_bit[16]为1117371168555555
不知道错在哪里
此帖出自单片机论坛

最新回复

小伙很善于总结,做研发的话这一点非常好,越是大公司越能体现出善于总结的社会主义优越性来:)  详情 回复 发表于 2009-9-27 23:04
点赞 关注
 

回复
举报

1668

帖子

0

TA的资源

裸片初长成(初级)

沙发
 
如果定义了数组num_bit,那
num_bit= (unsigned char) total_num%10
这样做会发生非常严重的问题,num_bit是一个char *指针。一般的编译器会抛出一个编译错误。
你确认源码是这样写的?
此帖出自单片机论坛
 
 

回复

6366

帖子

4929

TA的资源

版主

板凳
 
原帖由 richiefang 于 2009-9-24 14:01 发表
如果定义了数组num_bit,那
num_bit= (unsigned char) total_num%10
这样做会发生非常严重的问题,num_bit是一个char *指针。一般的编译器会抛出一个编译错误。
你确认源码是这样写的?


说得对,
看楼主的意思是想赋值给数组N,但你的用法有些不对
你是不是想num_bit【i】= (unsigned char) total_num%10,试试看
此帖出自单片机论坛
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

4
 

程序写得不错,总共7行,出现了4个错误:L
此帖出自单片机论坛
 
 
 

回复

10

帖子

0

TA的资源

一粒金砂(初级)

5
 
支持下楼主~~楼主辛苦了。







Signature--------------------------------------------------------------------------------------------------------------------
Nothing is impossible for a willing heart.
ugg classic cardy
此帖出自单片机论坛
 
 
 

回复

118

帖子

0

TA的资源

五彩晶圆(中级)

6
 
原帖由 tiankai001 于 2009-9-24 14:34 发表


说得对,
看楼主的意思是想赋值给数组N,但你的用法有些不对
你是不是想num_bit【i】= (unsigned char) total_num%10,试试看

试过了,还是错。一样
此帖出自单片机论坛
 
 
 

回复

2498

帖子

0

TA的资源

至上芯片

7
 

回复 楼主 linjingui 的帖子

这是一个典型的c语言溢出的问题。double类型的数据最大是多少???
强制转换成char类型。才8位。有32位的数字到8位,只是模10,显然会溢出吗。结果错误就免不了了
建议你看看进制飞转换。模制去大一点,每次保留上再来做。
此帖出自单片机论坛
 
个人签名我的邮箱gaoxiaoan123@163.com!回帖是一种美德!互相帮助,共同进步!
口头禅:生活在于创造机会,把握机会!
 
 

回复

118

帖子

0

TA的资源

五彩晶圆(中级)

8
 
原帖由 gaoxiao 于 2009-9-24 16:48 发表
这是一个典型的c语言溢出的问题。double类型的数据最大是多少???
强制转换成char类型。才8位。有32位的数字到8位,只是模10,显然会溢出吗。结果错误就免不了了
建议你看看进制飞转换。模制去大一点,每次保留上 ...


double是64位,我模制按你说的做了,先转成long int,再转char还是不行
难道还要加一个int,才行?
此帖出自单片机论坛
 
 
 

回复

2771

帖子

0

TA的资源

裸片初长成(中级)

9
 
原帖由 linjingui 于 2009-9-24 16:56 发表


double是64位,我模制按你说的做了,先转成long int,再转char还是不行
难道还要加一个int,才行?
此帖出自单片机论坛
 
 
 

回复

1668

帖子

0

TA的资源

裸片初长成(初级)

10
 

回复 8楼 linjingui 的帖子

好吧,告诉你最后一招
把那个1111111111111111写成1111111111111111ULL,
编译器会把它当成unsigned long long类型赋值给变量。
此帖出自单片机论坛
 
 
 

回复

2771

帖子

0

TA的资源

裸片初长成(中级)

11
 
原帖由 richiefang 于 2009-9-25 11:23 发表
好吧,告诉你最后一招
把那个1111111111111111写成1111111111111111ULL,
编译器会把它当成unsigned long long类型赋值给变量。





谢谢LS,搞定了
此帖出自单片机论坛
 
 
 

回复

2498

帖子

0

TA的资源

至上芯片

12
 

回复 8楼 linjingui 的帖子

不是那样装换。是要除一个数。比如说65536,256,等等等的,不然的话你总是有摄入误差的。是不可能转换的成功的。要不你把你转换的,c语言程序发过来。。。。
此帖出自单片机论坛
 
个人签名我的邮箱gaoxiaoan123@163.com!回帖是一种美德!互相帮助,共同进步!
口头禅:生活在于创造机会,把握机会!
 
 

回复

118

帖子

0

TA的资源

五彩晶圆(中级)

13
 
原帖由 gaoxiao 于 2009-9-25 15:34 发表
不是那样装换。是要除一个数。比如说65536,256,等等等的,不然的话你总是有摄入误差的。是不可能转换的成功的。要不你把你转换的,c语言程序发过来。。。。

  1. void display(double junshu) //junshu是一个16位的十进制正整数
  2. {
  3. unsigned char i,jun_bit[16];
  4. for(i=0;i<16;i++)
  5. {
  6. jun_bit[i]=(unsigned char)junshu%10;
  7. junshu=junshu/10;
  8. PutChar(121-i*6,52,jun_bit[i]+48);//在LCD上显示的功能函数PutChar(x,y,data)
  9. }
  10. }
复制代码
帮忙给看看
此帖出自单片机论坛
 
 
 

回复

1668

帖子

0

TA的资源

裸片初长成(初级)

14
 

回复 13楼 linjingui 的帖子

1, junshu不要用double。double是双精度浮点,用来表示整数的话不合适。可以考虑用long或long long类型。
2, 这句话有问题: jun_bit=(unsigned char)junshu%10;
应该写成jun_bit=(unsigned char)(junshu%10);
混合运算要用括号来确定优先级,不要挑战自己的记忆力。
此帖出自单片机论坛
 
 
 

回复

2498

帖子

0

TA的资源

至上芯片

15
 

回复 13楼 linjingui 的帖子

有点不明白你的意思,你是想把16位的数存在数组里面的吗,一个数组元素存一个是把?
那样的话,类型用int就行,
junshu是一个16位的十进制正整数 是10^16次方的数量级吗?
那样的话,四个字节是不够的。那样的话数字太大, 你可以使用数组来表示,也就是12个字节来表示。
我想你的意思可能是一个数比如说10000是五位数,存在一个数组里面。你想以1,0,0,0,0
然后想显示出来对吗?

void display(int  junshu) //是一个小于65535的的十进制正整数
{
unsigned char i,jun_bit[6];
int temp=junshu;  //用来存取余数
for(i=0;i<5;i++)
{
jun_bit=(unsigned char) (junshu%(10*(4-i)));
temp=temp/10;
PutChar(121-i*6,52,jun_bit+48);//在LCD上显示的功能函数PutChar(x,y,data)   
}
}
此帖出自单片机论坛
 
个人签名我的邮箱gaoxiaoan123@163.com!回帖是一种美德!互相帮助,共同进步!
口头禅:生活在于创造机会,把握机会!
 
 

回复

118

帖子

0

TA的资源

五彩晶圆(中级)

16
 
谢谢大家的帮助,程序终于调通了。就是数据类型的问题
将junshu定义成unsigned long long 型
在%10时强制转换。
通过这个小程序,我学会了以下知识:
1)熟悉你的编程对象--数据,它是什么一定要明白
2)定义一个很大的数不止一种类型,double,long long,数组等等
3)强制转换实现不同类型间的计算
4)运算优先级的规范写法
5)单片机很听话,你让它干啥它就干啥,遇到问题一定静下心来分析源码有哪些bug
6)论坛是个很好的学习平台,相信一定会有热心人乐于分享的
7)基础很重要,没有基础的,用到什么学什么,有了底气才能更好的与别人讨论
8)工作终归是自己的,该坐冷板凳还是要坐的
谢谢坛友们!
此帖出自单片机论坛
 
 
 

回复

1668

帖子

0

TA的资源

裸片初长成(初级)

17
 

回复 16楼 linjingui 的帖子

小伙很善于总结,做研发的话这一点非常好,越是大公司越能体现出善于总结的社会主义优越性来:)
此帖出自单片机论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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