C ++解释了将uint64转换为uint32

时间:2015-04-02 03:23:27

标签: c++ casting unsigned

我正在尝试将uint64_t(使用boost计时器高精度时钟表示从D-day开始的纳秒时间)转换为uint32_t,以便为随机数生成器播种。

我只想要uint64_t的最低32位。这是我的尝试:

uint64_t ticks64 = dtn.count(); // This has the ticks in nanosec
uint64_t ticks32_manual = ticks64 & 0xFFFFFFFF;
uint32_t ticks32_auto = (uint32_t) ticks64;
mexPrintf("Periods: %llu\n", ticks64);
mexPrintf("32-bit manual truncation: %llu\n", ticks32_manual);
mexPrintf("32-bit automatic truncation: %u\n", ticks32_auto);

我的代码输出如下:

  

期间:651444791362198

     

32位手动截断:1331774102

     

32位自动截断:1331774102

我期待32位和原始64位表示的最后几位是相同的,但它们不是。也就是说,我以为我会“失去64位数字的左半部分”。

有谁可以解释这里发生了什么?感谢。

是的,我见过this link

1 个答案:

答案 0 :(得分:4)

正如评论中指出的那样,您的代码操作没有任何问题,只是您没有正确地将输出可视化。这是您的代码,已更正且可运行:

#include <cstdio>
#include <cstdint>

int main() {
  uint64_t ticks64 = 651444791362198llu;
  uint64_t ticks32_manual = ticks64 & 0xFFFFFFFF;
  uint32_t ticks32_auto = (uint32_t) ticks64;

  printf("Periods: %llX\n", ticks64);
  printf("32-bit manual truncation: %llX\n", ticks32_manual);
  printf("32-bit automatic truncation: %X\n", ticks32_auto);
}

输出是:

Periods: 2507C4F614296
32-bit manual truncation: 4F614296
32-bit automatic truncation: 4F614296