64位无符号减法问题
64bit unsigned Subtraction issue
所以,我有如下-
size_t Num2= 2359198081
size_t Num1= 2359197799
size_t Diff= Num2 - Num1;
如果我做了,
std::cout << "Diff: " << Diff;
,
Diff: 18446744071938113404
如果我执行int64_t而不是size_t,那么正如预期的那样,我得到了一个负值,因为Num2和Num1大于2升到32
如果我做了,
std::cout << "Diff: " << Num2 - Num1 << std::endl;
然后得到
Diff: 282
我在这里做错了什么?相反,我怎么能让它做一个正确的64位减法?
你能按照其他人的要求在评论中发布你的代码吗(抱歉,由于50+ rep的要求,不能评论)。由于size_t
是unsigned int
或unsigned long int
,因此减法应该得到282,除非您使用的是实现unsigned int
短于32位的机器/编译系统。
我试过了,它可以正常工作(64位)。由于Diff
在您的情况下打印出0xFFFFFFFF966A0000
,我猜您也在size_t
上使用64位实现。只有当你发布完整的代码时,才能说得更多!
问题是你想说的是Diff = Num2 - Num1
,但你不小心说成了Diff = Num1 - Num2
:
size_t Num2= 2359198081;
size_t Num1= 2359197799;
size_t Diff = Num1 - Num2;
std::cout << Diff << std::endl;
打印:
18446744073709551334
这就是你得到的。嗯,你声称你得到的是18446744071938113404
,这略有不同,所以我猜你的实际数字是不同的,你的问题不准确。
size_t num2 = 2359198081;
size_t num1 = 2359197799;
size_t diff = num2 - num1;
std::cout << diff << std::endl;
打印:
282年
这就是你想要的。
演示相关文章:
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 将无符号char*转换为std::istream*C++
- 如何在C++中将一个无符号的 int 转换为两个无符号的短裤?
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 如何理解将半精度指针转换为无符号长指针和相关的内存对齐
- 无符号int的比较始终是正确的(NPOS问题?)
- 无符号字符数组问题
- 关于"无符号字符"和"移位"操作的迷你问题?
- 初始化无符号的 int *数组时遇到问题
- 将无符号字符 * 图像转换为 OpenCV Mat 时出现问题
- 无符号字符返回值和+=出现问题
- 有符号和无符号int、XNOR的位操作问题
- 在我的程序中"无符号"之前的预期主表达式(析构函数和构造函数问题)
- 从有符号问题到无符号问题的类型转换
- 在检查数字是否在范围内时,无符号int的滚动问题
- 无符号长-长的问题
- 将浮点转换为无符号短整型时出现舍入问题
- "无符号长整型"和'unsigned long long int'赋值问题
- 我的For循环出了什么问题?我得到警告:有符号和无符号整数表达式之间的比较[-Wsigncompare]
- 64位无符号减法问题