兄弟,别断章取义,别抛开我的前半句话——“作为单目运算符”。
首先要强调的是,它们是
运算符,而并不是数值的一部分。
准确的定义是:单一的“+”叫一元正号运算符,“-”叫一元负号运算符。
正号运算符并不改变数值,它什么都不做,所以实际中几乎没见过谁用它,最多是在表达式中起个强调作用。
负号运算符的作用就如同它的名字,将值变换为绝对值相同,符号相反的值。
说说你这个例子-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语言代码里。