打印

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

[复制链接]
8012|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 | 只看该作者
你可以简单找个软件试试不就知道了……

使用特权

评论回复
5
yaozi129|  楼主 | 2011-5-3 22:18 | 只看该作者
我想着既然是从可靠性方面考虑,就是一般都不会出问题。
所以我觉得试的话是很难试出来差别的。

使用特权

评论回复
6
yaozi129|  楼主 | 2011-5-3 22:20 | 只看该作者
本帖最后由 yaozi129 于 2011-5-3 22:53 编辑

3# hgjinwei
一同事和我说的,说的时候底气十足。
我是第一次听说,所以来这坛子上请教各位大侠,看看有没有什么说法。:)

使用特权

评论回复
7
goldenriver| | 2011-5-3 22:37 | 只看该作者
呵呵呵,我也等着高手的回答

使用特权

评论回复
8
CC2530| | 2011-5-4 07:11 | 只看该作者
今天突然听到一说法,说是不同类型之间的变量之间,例如把一个int类型的变量的值赋给一个long类型的变量时,要先把long类型变量清零,然后再把int类型的变量的值赋给long类型变量,当然强制类型转换不可少。说是从可 ...
yaozi129 发表于 2011-5-3 21:30


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

完全多此一举。
没有必要

使用特权

评论回复
9
ejack| | 2011-5-4 07:45 | 只看该作者
想了一下几种常用的应用条件,暂时觉得没这个必要。
而且,对于运行时关键run-time critical的变量而言,多一次清零操作反而会引入风险……

使用特权

评论回复
10
eydj2008| | 2011-5-4 08:14 | 只看该作者
有些东西不需要问,自己亲自试一下 不就解决问题了。

使用特权

评论回复
11
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;
}

使用特权

评论回复
12
ayb_ice| | 2011-5-4 08:23 | 只看该作者
没有此说法
低往高不会有问题,比如
int a; // 16
long b; // 32
b = a;
反之有问题,会被截断

使用特权

评论回复
13
clingos| | 2011-5-4 08:33 | 只看该作者
没有此说法,也没必要!

使用特权

评论回复
14
pentral0311| | 2011-5-4 08:57 | 只看该作者
没有问题,除非你是多线程,多个地方写和都,8位机,不是原子操作,才有可能!!!

使用特权

评论回复
15
jack_shine| | 2011-5-4 09:24 | 只看该作者
那是编译器的问题,应用层不用考虑太多

使用特权

评论回复
16
来与君| | 2011-5-4 09:38 | 只看该作者
ejack发表于 2011-5-4 07:45 | 只看该作者 回复 引用 评分 报告 返回版面 TOP  
得分:0
9楼:
想了一下几种常用的应用条件,暂时觉得没这个必要。
而且,对于运行时关键run-time critical的变量而言,多一次清零操作反而会引入风险……
-------------------------------------------------------------------------------------------------
如果一个变量的赋值不能在一次原子操作中完成,那么少一次清零并不能完全避开风险。

在这里,我认为清零只是多余而已。

使用特权

评论回复
17
ayb_ice| | 2011-5-4 11:50 | 只看该作者
是否是原子操作与清零没有关系,这完全是两码事

使用特权

评论回复
18
ayb_ice| | 2011-5-4 11:51 | 只看该作者
是否是原子操作与清零没有关系,这完全是两码事
ayb_ice 发表于 2011-5-4 11:50

清零没有意义

使用特权

评论回复
19
swfc_qinmm| | 2011-5-4 13:54 | 只看该作者
不需要……

使用特权

评论回复
20
swfc_qinmm| | 2011-5-4 13:54 | 只看该作者
不需要……

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

20

帖子

0

粉丝