我有一个问题,
/ +和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);
做/ +和/有什么区别?它真的分裂然后添加?如果是这样的话,它究竟是什么划分?任何清晰度将不胜感激。我很感兴趣,因为使用/ +实际上为我正在运行的程序产生了更好的结果,然后只是+做了。
答案 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。如果你能解释“更好”的意思......