如何正确使用 >=?(a+f()+c)>=0 错了吗?
How can I use >= correctly? Is (a+f()+c)>=0 wrong?
int he = 1;
vector<vector<int>> matrix { { 1, 5, 9 }, { 10, 11, 13 }, { 12, 13, 15 } };
bool bo=(he - matrix.size() + 1) >= 0;
我认为bo
是假的,但这是真的。 我不知道为什么。左值有错吗?
matrix.size()
是无符号类型,因此整个表达式将提升为无符号。比较是unsigned(1 - 3U + 1) >= 0
,或者unsigned(-3) >= 0
,这总是正确的。(对于 32 位整数,unsigned(-3)
类似于0xFFFFFFFD
。
您可以将其强制转换为预期类型
bool bo = int(he - matrix.size() + 1) >= 0;
尽管如果size
返回的类型(unsigned long
(大于int
,这可能会生成编译器警告(如果是这种情况,请更改强制转换中使用的类型(。
matrix.size()
的类型size_t
是无符号的。
因此he - matrix.size() + 1
,它应该具有值-1
从算术的角度来看,实际上有一个非常 高正值(由于包裹低于零(。
这就是为什么比较在这里显示意外结果的原因。
相关文章:
- #定义c-预处理器常量..我做错了什么
- 努力将整数转换为链表。不知道我在这里做错了什么
- 首要问题的答案让值班员搞错了
- 看起来is_nothrow_constructible_v()在MSVC中被破坏了,我错了吗
- .h 和.cpp文件分离时出错,但仅使用 .h 文件时没有错误.我做错了什么?
- 我的C++线程做错了什么?
- 如何正确使用 >=?(a+f()+c)>=0 错了吗?
- 谁能告诉我我用 getline 做错了什么 (cpp) 格式
- 没有输出的合并排序我做错了什么?
- 我正在尝试使用 while 循环从字符串中删除字母,直到没有字母。我在这里做错了什么?
- 在C++中使用 AKS 素数测试计算双胞胎素数 我做错了什么?
- 指针相关的UE4崩溃.我的指针哪里错了?
- 我一直试图弄清楚我在这个链表程序中做错了什么
- 我正在尝试学习如何在 c++ 中传递指针,但出现错误:没有用于调用"test"的匹配函数。我做错了什么?
- FFMPEG,C++,内存泄漏,我做错了什么?
- 我做错了什么?反向字符串 C++
- 我在这个课上做错了什么?
- 创建整数的 2D 数组,该数组将使用两个函数用随机数填充矩阵.我做错了什么?
- 在不使用内置库函数的情况下添加字符串,我做错了什么?
- 理解C++内存顺序,我错了吗?