C中的+ +和+之间的区别?

时间:2010-11-25 19:08:03

标签: c

我有一个问题,

/ +和just +之间有什么区别?

在我的程序中,我有这行代码

md_addr_t GSharePC = PC >> (PC_ZERO_BITS/* + (int)log2(Tournament_Counters)*/) & (Tournmanet_GShare_PHT_Entries - 1);

然而,当我去取消评论时,我意外地离开了第一个/ in这样

md_addr_t GSharePC = PC >> (PC_ZERO_BITS/ + (int)log2(Tournament_Counters)) & (Tournmanet_GShare_PHT_Entries - 1);

它应该只是

md_addr_t GSharePC = PC >> (PC_ZERO_BITS + (int)log2(Tournament_Counters)) & (Tournmanet_GShare_PHT_Entries - 1);

做/ +和/有什么区别?它真的分裂然后添加?如果是这样的话,它究竟是什么划分?任何清晰度将不胜感激。我很感兴趣,因为使用/ +实际上为我正在运行的程序产生了更好的结果,然后只是+做了。

6 个答案:

答案 0 :(得分:7)

+既是二元运算符(加法)又是一元运算符(与否定相反)。

你的第二行解析为

(PC_ZERO_BITS / (+(int)log2(Tournament_Counters))) & (Tournmanet_GShare_PHT_Entries - 1)

答案 1 :(得分:3)

在第二种情况下,+用作一元正面运算符

+-符号可用作二进制一元运算符,具体取决于其上下文和运算符优先级。

-用于表示负数,+用于表示正数。 +的使用频率较低,因为默认情况下整数文字。这样做:

printf("Hello %d", + 5);

相当于:

printf("Hello %d", 5);

这就是你的代码编译的原因。

答案 2 :(得分:3)

并非每种语言都有一元+运算符,并且在大多数运算符中,它都是无运算符。但有时,它会执行诸如将字符串转换为与某些语言中的"string" + 0大致相同的数字之类的操作。 Ruby有一个精心设计的解析器,可以分析行尾是否真的是语句结束标记,因此一元+可能会在另一行上继续声明。

运算符重载可能有任何意义。

但回到C99,一元+运算符只做一件事:它应用整数提升。因为如果在表达式中使用操作数,那么无论如何都会发生这种情况,人们会想到一元+在C中只是为了与一元对称 - 。

很难看到这一点在行动,因为促销活动如此普遍适用。 我想出了这个:

printf("%zd\n", sizeof( (char) 'x'));
printf("%zd\n", sizeof(+(char) 'x'));

(在我的Mac上)打印

1
4

答案 3 :(得分:1)

据我所知,你没有删除评论,即/* comment */ 您只删除了星号*并省略了正斜杠/ 所以,基本上你现在正在分裂,+现在(就像其他答案所说的那样)仅仅是一元。

答案 4 :(得分:1)

在此:

PC_ZERO_BITS/ + (int)log2(Tournament_Counters)

+是一元+所以你实际上可以删除它。

答案 5 :(得分:1)

它被视为(PC_ZERO_BITS)/(+ (int)log2(Tournament_Counters))所以你除了+而不是+。您可能想了解operators precedence。如果你能解释“更好”的意思......