从无符号整数减去有符号整数
Subtract Signed integer from Unsigned integer
unsigned int value = 1860;
int data = 1300;
if( (data - value) > 0)
{
printf("Why it is printing this");
}
输出:为什么要打印这个
我不明白为什么即使变量"数据"的值小于变量"值",有符号形式的无符号通过"if"的减法。我真的很好奇有符号和无符号减法是如何"一个小错误",但却导致了一个大错误,因为我使用的是"延迟"函数而不是"打印",我的任务被延迟了,这造成了混乱。
unsigned int value = 1860;
int data = 1300;
if( (data - value) > 0)
{
Delay(data - value);
}
这部分一直在拖延,我的任务永远不会结束。这意味着"data - value"的值是负的,这就是它无限等待的原因。同时,它通过"if",条件是"data-value"> 0。我怀疑如果有符号转换为无符号并通过"if",那么为什么它给"延迟"函数提供负值。 int
数据类型在C/c++中默认为signed
,即支持负数。当表达式同时包含signed
和unsigned
int
值时,会自动将signed int
转换为unsigned int
,因此结果不会小于0
。您可能需要这样做:
unsigned int value = 1860;
int data = 1300;
if( (signed)(data - value) > 0)
{
printf("It should print this!");
}
它显式地将表达式的结果转换为signed
值,以便它可以是一个负数。
相关文章:
- 检查TCHAR数组输入是否为带符号整数C++
- 如何打印boost多精度128位无符号整数
- C++模板函数,用于比较任何无符号整数和有符号整数
- 为什么乘以常量有符号整数分数没有优化?
- 在线程中读取无符号整数时,c++ 位是否以原子方式切换?
- FlatBuffers/Protobuf 中是否有支持任意 24 位有符号整数定义的可移植二进制序列化架构?
- C++11 标准是否保证零值有符号整数的一元减号为零?
- Constexpr 可变参数模板,用于对无符号整数进行重新排序
- 为什么 Clang 和 GCC 中两个无符号整数之和的结果类型不同
- 为什么对无符号字符进行算术运算会将它们提升为有符号整数
- 从 std::string 转换为 const 无符号整数
- 迭代器和无符号整数的重载 + 运算符
- C++,概念不适用于无符号整数作为结果类型?
- 在C++中,将无符号整数转换为八进制表示,反之亦然的最佳方法是什么
- 原子式清除无符号整数的最低非零位
- 什么是 16 字节有符号整数数据类型?
- 计算机使用什么方法添加无符号整数
- 运行时错误:有符号整数溢出:964632435 * 10 无法在类型 'int' 中表示
- boost::任何带有结构体和无符号整数
- 添加有符号和无符号整数