| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 313 人关注过本帖
标题:表达式的问题
只看楼主 加入收藏
尚志
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2013-2-2
结帖率:0
收藏
已结贴  问题点数:2 回复次数:5 
表达式的问题
书上讲“+val;和-val;不产生编译器错误,因为他们是有效的表达式”,请问:他们表示什么??
搜索更多相关主题的帖子: 有效 编译器 表达式 
2013-02-02 23:29
tompobing
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:260
专家分:809
注 册:2012-12-9
收藏
得分:1 
是++还是+???
2013-02-02 23:35
尚志
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2013-2-2
收藏
得分:0 
回复 2楼 tompobing
就是简单的 +
2013-02-02 23:44
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:1 
作为单目运算符,它们表示“正”“负”的意思。

重剑无锋,大巧不工
2013-02-03 09:13
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:1 
回复 4楼 beyondyf
我听说好像C标准中没有正负这个说法
比如 -123 是个表达式,是 减去123,而非 负123
所以 INT_MIN 被定义为
#define INT_MIN (-2147483647 - 1)
而不能定义为
#define INT_MIN (-2147483648)
否则类型就不是int了
2013-02-04 09:26
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
兄弟,别断章取义,别抛开我的前半句话——“作为单目运算符”。

首先要强调的是,它们是运算符,而并不是数值的一部分。

准确的定义是:单一的“+”叫一元正号运算符,“-”叫一元负号运算符。

正号运算符并不改变数值,它什么都不做,所以实际中几乎没见过谁用它,最多是在表达式中起个强调作用。

负号运算符的作用就如同它的名字,将值变换为绝对值相同,符号相反的值。

说说你这个例子-2147483648。我还是要强调“-”在这里是个运算符,而参与运算的量就是2147483648。这个值超出了32位有符号整型的表达范围,当然是有问题的。

但事实上,如果你真在代码中写了-2147483648也仅仅是收到一条警告信息而已,结果依然是正常的(仅指32位编译器)。

顺带提个有意思的事,无符号的2147483648与有符号的-2147483648在4字节内存里的存在是一样的。所以下面这段代码

int a, i;
a = 2147483648U;
for(i = 0; i < 10; i++)
{
    printf("%d\n", a);
    a = -a;
}

输出的将是10个-2147483648。

这点性质倒是让我联想到了物理学中“负温度”的概念(注:是开氏温度下的负温度),有些神似的地方。

上面的代码也演示了负号运算符的主要用途,即反转(常/变)量的符号。这在做一些级数运算是常用到。



至于你理解的“减去”,那是它作为双目运算符“减号”的意义。虽然本身“取负”和“用零减”无论从数学上还是在C语言代码里“结果”都是一样的,但它们的“意义”完全不同,无论从数学上还是在C语言代码里。

重剑无锋,大巧不工
2013-02-04 11:24
快速回复:表达式的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.039518 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved