C++计算两个off64_t数字之间的差值
Calculate the difference between two off64_t numbers C++
我想分配内存以便在我的C++程序中读取(整个)非常大的文件(15-25 Gb)。我使用off64_t
类型来获取我要读取的文件的开始和结束位置,这些位置是使用函数 ftello64
从我的文件中获取的。我现在想在一个名为 size 的变量中获取两者之间的差异,然后将其分配给 char 数组。但是,尽管编译成功,但我的代码无法正常工作。我尝试size = (off64_t)(end_of_mem-start_of_mem);
start_of_mem
和end_of_mem
都是off64_t
数字,但是当我运行程序时,输出是
Starting position in memory (start_of_mem):152757
Ending position in memory (end_of_mem):15808475159
Size: -1371546782
我应该使用哪种变体类型来正确执行此操作?提前感谢您的帮助和建议。
您正在经历从 64 位到 32 位的 int 向下转换副作用。
看看下面的实验:
#include <cstdint>
#include <iostream>
int main(){
int64_t int64 = 15808475159 - 152757;
int32_t int32 = int64;
std::cout << "int64_t: " << int64 << "n";
std::cout << "int32_t: " << int32 << "n";
}
输出:
int64_t: 15808322402
int32_t: -1371546782
问题是15808475159 - 152757
大于 32 位整数范围的结果。因此,由于溢出,它被截断(或 mod 2^32)。然后,由于它声明为有符号的 32 位,它显然属于解释的负范围。
相关文章:
- 在数字之间插入 + 或 - 符号以使其等于整数
- 获取 2 个数字之间的差异百分比
- 两个有符号数字之间的距离
- 无法理解代码背后的逻辑,这是在两个给定数字之间生成素数的优化问题
- 数字之间的比较
- 在没有比较运算符的情况下查找 2 个数字之间的最小值
- 不理解连续数字之间的空格代码
- 如果 2 个数字之间的差值在 1 到 100 之间,则应运行 if 语句
- 第一个和第二个数字之间能被 4 和 6 整除的所有整数的总和
- 2 个给定数字之间的双精度密度
- 三个数字之间的 C++ 相加两个更高的数字,没有循环和数组
- 给定n个数字,编写一个例程,以在4个连续数字之间找到最大的数字
- 在二进制字符串的数字之间留出空间
- 如何使用Mersenne Twister生成两个数字之间的所有值一次
- 程序以计算2个数字之间的素数-SPOJ Quality2
- 查找 2 个数字之间的数字
- 查看 deque 中两个相等数字之间的长度是否为偶数
- 计算两个数字之间差值的最短方法
- 查找两个数字之间的质数
- 我的代码试图找到 0 - n 个数字之间的所有素数,语句"bool prime[n + 1];"中的'+ 1'有什么用?