波浪号运算符分别返回 -1、-2 而不是 0、1
tilde operator returning -1, -2 instead of 0, 1 respectively
我对此有点困惑。我认为 C++ 中的 ~ 运算符应该以不同的方式工作(不是 Matlab-y)。下面是一个最小的工作示例:
#include <iostream>
using namespace std;
int main(int argc, char **argv)
{
bool banana = true;
bool peach = false;
cout << banana << ~banana << endl;
cout << peach << ~peach << endl;
}
这是我的输出:
1-2
0-1
我希望有人能对此有所了解。
这正是应该发生的事情:当你反转零的二进制表示时,你会得到负一; 当你反转一的二进制表示时,你会得到二的补码表示中的负二。
00000000 --> ~ --> 11111111 // This is -1
00000001 --> ~ --> 11111110 // This is -2
请注意,即使以 bool
开头,运算符~
也会导致该值通过整数提升规则提升为int
。如果需要将bool
反转为bool
,请使用运算符 !
而不是 ~
。
~ 是按位 NOT 运算符,这意味着它会翻转所有位。对于布尔值 NOT,您应该使用 !算子
相关文章:
- 重载更少,则运算符返回相反的布尔值
- 使用重载 [] 运算符返回 std::map() 的可赋值
- 为什么我的超载"+"运算符返回的总额错误?
- (C++)为什么"||"逻辑运算符返回 1?
- 为流运算符返回代理类时解压缩参数
- C++ 运算符返回差异
- 重载运算符返回什么类型的值(对于用户定义的类型):右值还是左值?
- 运算符返回的指针的有效性 >
- 字符串流运算符>>返回值
- 动态指针引用数组由三元运算符返回值,但有异常
- 重载运算符返回的对象正在丢失 C++ 中的数据
- 如何使用设置运算符返回非 const 对象>
- 重载常量和非常量转换运算符返回数组类型时出现 MSVC 错误 C2593
- 为什么比较运算符"=="返回"YES"即使两个向量不同?
- 如何从重载的下标 [] 运算符返回 std::unique_ptr&?
- 从重载运算符返回对象>>
- 获取对运算符 [] 返回值unordered_map引用
- 我无法让这个虚拟模板化函子运算符返回正确的类型
- 为什么迭代器运算符 + 返回副本
- 从运算符[]返回对映射的char*的引用