0 c++ macros bitwise-operators
我有两个操作,我假设两个操作都在进行 ShiftLeft 按位操作。
#define TACH_MAX_OWN_ORDERS 1<<6
int myVal = 1<<6
cout<<"Value after operation|"<<myVal <<"|"<<TACH_MAX_OWN_ORDERS<<endl;
Run Code Online (Sandbox Code Playgroud)
价值的输出TACH_MAX_OWN_ORDERS总是让我惊讶。
Value after operation|64|16
Run Code Online (Sandbox Code Playgroud)
有没有人有任何线索,它是怎么来的???谢谢
宏按原样替换文本,因此会导致
cout<<"Value after operation|"<<myVal <<"|"<<1<<6<<endl;
Run Code Online (Sandbox Code Playgroud)
<<不在于结果,(int)1<<6而([...] << 1) << 6在于最深层次的[...]结果。std::cout这意味着您的宏在使用时将始终得到 16 std::cout,因为 1 和 6 被移入输出流 ( "1"+ "6"),而不是实际的数值64。
您应该在语句两边加上括号以避免这种情况:
#define TACH_MAX_OWN_ORDERS (1<<6)
Run Code Online (Sandbox Code Playgroud)
甚至更好,因为您应该避免使用宏,如果可用,请尝试使用编译时常量:
constexpr int TACH_MAX_OWN_ORDERS = 1 << 6;
Run Code Online (Sandbox Code Playgroud)