c++ - ~i 真的等同于 i != -1 吗?
问题描述
~i
在 C++ 中如何工作?
我刚刚注意到它相当于i != -1
,但我不确定。
int arr[3] {1, 2, 3};
int n = 3;
for (int i = n - 1; ~i; i--) {
cout << arr[i] << ' ';
}
它反向打印数组。
解决方案
~
是按位 NOT 运算符。~i
当且仅当i
所有位都为 1 时为 0。-1 是否所有位都为 1 取决于有符号数在系统上的表示方式。在二进制补码表示中,-1 用所有位 1 表示,在这样的系统上也是如此~(-1) == 0
。无论是在一个补码中,还是在符号和大小中,这都不成立。
因此,答案是否定的;并非在所有系统上。也就是说,二进制补码在现代机器(自 90 年代以来制造的所有产品)中相当普遍,在此类系统上,答案是肯定的。然而,无论符号表示如何,i != -1
都更具可读性。
推荐阅读
- android - 使用 OkHttp 客户端执行原始 graphQL 查询
- java - Kafka Streams并行处理不起作用
- python - /Service /usr/bin/chromium-browser 处的 WebDriverException 意外退出。状态码是:127
- flutter - 如何使 InputDecoration 边框仅出现在左侧?
- elasticsearch - ElasticSearch:查询最近的快照设计
- google-cloud-platform - 时间戳字段的 bq 加载命令
- date - 使转换器读取具有日期值的字符串时的转换问题
- linux - 如何将参数传递给 'tee' 的 Bash 脚本?
- debugging - 一种让 GDB 从本地 sysroot 和远程 gdbserver 加载库的方法
- java - 流式传输和过滤字符串以获取 char[] 数组