簡體   English   中英

C ++說明將uint64強制轉換為uint32

[英]C++ explain casting uint64 to uint32

我正在嘗試將uint64_t(使用升壓計時高精度時鍾表示從D天開始的納秒級時間)轉換為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位數字的左半部分。

誰能解釋這是怎么回事? 謝謝。

順便說一句,我看過這個鏈接

正如注釋中指出的那樣,代碼的操作沒有任何問題,只是您沒有正確地可視化輸出。 這是您的已更正且可運行的代碼:

#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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM