C语言不同类型变量之间赋值的问题

[复制链接]
9116|31
 楼主| yaozi129 发表于 2011-5-3 21:30 | 显示全部楼层 |阅读模式
本帖最后由 yaozi129 于 2011-5-3 21:31 编辑

今天突然听到一说法,说是不同类型之间的变量之间,例如把一个int类型的变量的值赋给一个long类型的变量时,要先把long类型变量清零,然后再把int类型的变量的值赋给long类型变量,当然强制类型转换不可少。说是从可靠性方面考虑。类似于
int a = 1;
long int b = 2;
//如果想把a的值赋给b,则先把0赋给b
b = 0;
b = (long int)(a);

有必要吗?
qinhan 发表于 2011-5-3 21:31 | 显示全部楼层
没听说
hgjinwei 发表于 2011-5-3 21:42 | 显示全部楼层
此话出自何处,可有考究?
ljb_sunshine 发表于 2011-5-3 21:43 | 显示全部楼层
你可以简单找个软件试试不就知道了……
 楼主| yaozi129 发表于 2011-5-3 22:18 | 显示全部楼层
我想着既然是从可靠性方面考虑,就是一般都不会出问题。
所以我觉得试的话是很难试出来差别的。
 楼主| yaozi129 发表于 2011-5-3 22:20 | 显示全部楼层
本帖最后由 yaozi129 于 2011-5-3 22:53 编辑

3# hgjinwei
一同事和我说的,说的时候底气十足。
我是第一次听说,所以来这坛子上请教各位大侠,看看有没有什么说法。:)
goldenriver 发表于 2011-5-3 22:37 | 显示全部楼层
呵呵呵,我也等着高手的回答
CC2530 发表于 2011-5-4 07:11 | 显示全部楼层
今天突然听到一说法,说是不同类型之间的变量之间,例如把一个int类型的变量的值赋给一个long类型的变量时,要先把long类型变量清零,然后再把int类型的变量的值赋给long类型变量,当然强制类型转换不可少。说是从可 ...
yaozi129 发表于 2011-5-3 21:30


b = 0;
b = (long int)(a);

完全多此一举。
没有必要
ejack 发表于 2011-5-4 07:45 | 显示全部楼层
想了一下几种常用的应用条件,暂时觉得没这个必要。
而且,对于运行时关键run-time critical的变量而言,多一次清零操作反而会引入风险……
eydj2008 发表于 2011-5-4 08:14 | 显示全部楼层
有些东西不需要问,自己亲自试一下 不就解决问题了。
eydj2008 发表于 2011-5-4 08:23 | 显示全部楼层
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
        char a = 0xf1;
        int b = 0xf2f10000;
       
        //b = 0;
        b = (int)a;
        cout<<hex<<"b = "<<b<<endl;
       
       
        return 0;
}
ayb_ice 发表于 2011-5-4 08:23 | 显示全部楼层
没有此说法
低往高不会有问题,比如
int a; // 16
long b; // 32
b = a;
反之有问题,会被截断
clingos 发表于 2011-5-4 08:33 | 显示全部楼层
没有此说法,也没必要!
pentral0311 发表于 2011-5-4 08:57 | 显示全部楼层
没有问题,除非你是多线程,多个地方写和都,8位机,不是原子操作,才有可能!!!
jack_shine 发表于 2011-5-4 09:24 | 显示全部楼层
那是编译器的问题,应用层不用考虑太多
来与君 发表于 2011-5-4 09:38 | 显示全部楼层
ejack发表于 2011-5-4 07:45 | 只看该作者 回复 引用 评分 报告 返回版面 TOP  
得分:0
9楼:
想了一下几种常用的应用条件,暂时觉得没这个必要。
而且,对于运行时关键run-time critical的变量而言,多一次清零操作反而会引入风险……
-------------------------------------------------------------------------------------------------
如果一个变量的赋值不能在一次原子操作中完成,那么少一次清零并不能完全避开风险。

在这里,我认为清零只是多余而已。
ayb_ice 发表于 2011-5-4 11:50 | 显示全部楼层
是否是原子操作与清零没有关系,这完全是两码事
ayb_ice 发表于 2011-5-4 11:51 | 显示全部楼层
是否是原子操作与清零没有关系,这完全是两码事
ayb_ice 发表于 2011-5-4 11:50

清零没有意义
swfc_qinmm 发表于 2011-5-4 13:54 | 显示全部楼层
不需要……
swfc_qinmm 发表于 2011-5-4 13:54 | 显示全部楼层
不需要……
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

20

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部