这两个表达式相等吗?
Are these two expressions equivalent
int x, N;
且N总是正的。下面两行相等吗?
if (x>=0 && x<N)
if ( (unsigned)x < (unsigned)N )
在典型的实现中,是的,它们是等价的:如果x
是负的,(unsigned) x
将大于INT_MAX
。这反过来必然意味着(unsigned) x < (unsigned) N
将为假。
int
和unsigned int
相同数量的值位(INT_MAX == UINT_MAX
),在这种情况下,(unsigned) x
将不大于INT_MAX
,并且(unsigned) x < (unsigned) N
可能仍然为真。
当UINT_MAX等于INT_MAX时,行是不相等的。C允许这样的实现。
在这种情况下,当x从整型转换为无符号整型时,可能不会产生大于n的值
例如:N的值为INT_MAX, x的值为-2。完成从有符号整型到无符号整型的转换后,N的值是INT_MAX,但x的值是INT_MAX-1。因此,使用第二个if语句,而不是第一个。
在实践中,您可能不会遇到这样的实现。当UINT_MAX的值大于INT_MAX时,if语句具有相同的行为。您总是可以断言这种行为:static_assert( UINT_MAX > INT_MAX , "" );
相关文章:
- 将fold表达式与std::一起用于两个元组
- 查找中间两个数字的正则表达式的匹配项
- 为什么在template函数广播中把两个extensor表达式加在一起不正确
- 使用 boost::regex (c++) 比较两个正则表达式
- 正则表达式 获取两个换行符之间的文本
- 我可以写出小于 -0.5 两个 ulps 的常量表达式双精度吗?
- 表达式未评估为常数两个级别的constexpr函数(编译器错误?)
- 是否可以找到两个模板参数之间表达式的类型
- 两个指针之间的差异是合法的 c++17 常量表达式
- 无限数组C++在一个表达式中使用两个新值调整数组大小
- 逗号(,)在条件部分中两个表达式之间的for循环中的工作方式
- 计算具有两个以上操作数的后缀表达式时出现问题
- 将cout与类中的两个表达式一起使用
- 正则表达式,获取两个关键字之间的整个字符串
- 这两个表达式相等吗?
- 是否有可能在某个表达式中定义两个单词,而不仅仅是一个单词
- 错误:当通过P2P通道连接两个NodeContainers时,期望主表达式在ns3中的const之前
- 这两个比较表达式相同吗?
- 在or条件语句中是否存在强制对两个表达式求值的模式或技巧?
- 将两个正则表达式结果连接到一个输出字段中,一次只能使用一个