关于单片机C语言的问题

u是int型,声明u为double型,这条语句u1=_cror_(u,10);对吗?能得到double型的u1吗?就是相当于u1=u/1024(u是double型)吗写错... u是int型,声明u为double型,这条语句u1=_cror_(u,10);对吗?能得到double型的u1吗?就是相当于u1=u/1024(u是double型)吗
写错了,声明u1为double型
展开
 我来答
申税炸蛋
2013-04-15 · TA获得超过466个赞
知道小有建树答主
回答量:196
采纳率:0%
帮助的人:193万
展开全部
即使你怎么声明u1是什么类型都好,如果使用了=_cror_()都会将u1强制类型转换为unsigned char 型。因为这个函数形参就是unsigned char型。打开intrins.h文件你就会找到这个函数的声明是:
extern unsigned char _cror_ (unsigned char, unsigned char);
且这个函数实现的是循环右移,移出的位将在最高位补回,并不能实现除以1024的效果。
若你想实现除以1024可以这样:u1=u1>>10。
更多追问追答
追问
哦,对。这是位右移。我是得到u1=u/1024,精确除?应该是u1=u>>10吧。。。
追答
若你要得到精确值,只能执行除法指令,并且应该写成
u1=(double)u/1024或u/1024.0。否则将即使u1是double型变量,因除数和被除数均为int变量,结果也将是int型结果,只不过保存为double型而已,也就是说是没有小数的。
wo是只小菜鸟
2013-04-15 · TA获得超过212个赞
知道小有建树答主
回答量:308
采纳率:75%
帮助的人:87万
展开全部
不能的。cror只是移位。超过你本身变量的定义的范围后后就自己补零了。
更多追问追答
追问
我定义的u1是double型啊
追答
移位10位,和你U/1024是不一样的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
成子盾
2013-04-15
知道答主
回答量:10
采纳率:0%
帮助的人:6.1万
展开全部
LZ可能有几个概念没有搞清楚,比如一个函数的形参是int,但实参是double,系统会默认把实参double转换成int形,小数部份将会被扔掉。当这个函数返回值是int类型而你把它的值赋予一个double类型的,系统也会把把这个函数的返回值转换成double类型,小数部份是为0的。但一般知道是有这个需要的都会加上强制转制符,否则编译系统会提示警告之类的问题。
更多追问追答
追问
对了,_cror_这个函数是不是只能对unsigned char型进行移位,我看intrins.h这个头文件里是这么写的
extern unsigned char _cror_ (unsigned char, unsigned char);
追答
是的,如果是其它类型的都是要经过类型强制转换,代价就是这个值的精度有损失,但这个函数应该用对应的类型。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式