将无符号长-长除法
Dividing unsigned long long
当前正在尝试用静态值除无符号长整型。
无符号长-长包含完成操作所需的微秒数。我想取这个值并将其转换为秒。
这是代码狙击坑:
double udDiffTime = ullHighResDiffTime / (unsigned long long)1000000;
在我的调试器的一个例子中,我可以看到ullHighResDiffTime=639。因此,udDiffTime=0.000639。但是,我得到udDiffTime=0。
我确信我在某个地方犯了一个错误。我尝试过使用1000000LL,而不是使用(unsigned long-long)进行强制转换,但没有区别。
您正在进行整数除法,因此,如果结果为0.000639,它将被截断为0。
如果想要浮点结果,则必须至少使用一个浮点操作数。例如,尝试将(unsigned long long) 1000000
更改为1000000.0
。
无符号长-长的范围最长可达18446744073709551615。double
可以达到1.7E308(即具有308个零的1)。问题是,值越高,精度就越低,所以你需要问问自己,大值是否真的需要那么精确,或者数字的大小是否更重要。
将其更改为
double udDiffTime = ullHighResDiffTime / 1000000.0;
以获得您期望的结果。
如果ullHighResDiffTime
的类型是无符号长,则将整数除以一个不会调用浮点运算的整数。
使用这个替代:
double udDiffTime = ullHighResDiffTime / 1000000.0;
unsigned long long
是一个积分类型,因此使用积分除法。只有在除法之后,该值才被转换为double
。尝试除以1000000.0
。
用相同类型对无符号long-long(或任何整数)进行除法运算会得到相同的类型。然后将该值转换为双精度,但结果已经为零。
用替身把它分开。
相关文章:
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 将无符号char*转换为std::istream*C++
- 如何在C++中将一个无符号的 int 转换为两个无符号的短裤?
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 如何理解将半精度指针转换为无符号长指针和相关的内存对齐
- C++中无符号字符溢出
- 使用无符号字符数组有效存储内存
- 如何打印boost多精度128位无符号整数
- C++模板函数,用于比较任何无符号整数和有符号整数
- 在 std::无符号字符的向量处存储 int 的十六进制表示形式
- 获取隐式转换溢出从无符号到已签名的警告
- 如何在保持其值的同时将 c++ 无符号字符变量转换为 char 变量
- 从 std::vector<无符号字符>切片中提取 int?
- 是什么导致了这种使用三进制而不是短整型的有符号int到无符号int转换
- 无法在 Arduino 中uint8_t数组转换为无符号长整型数组
- 将无符号字符的向量存储在数组中会给我 std::bad_alloc
- 为什么在执行 int / 无符号 int 除法时使用 'divl'
- 避免使用无符号整数除法
- 有符号和无符号之间的减法,然后除法
- 将无符号长-长除法