簡體   English   中英

uint8_t VS uint32_t的不同行為

[英]uint8_t VS uint32_t different behaviour

我目前正在處理需要使用uint8_t的項目。 我發現了一個問題,有人可以向我解釋為什么會這樣嗎?

//using DIGIT_T = std::uint8_t;
using DIGIT_T = std::uint32_t;
std::uint8_t bits = 1;
DIGIT_T test1 = ~(DIGIT_T)0;
std::cout << std::hex << (std::uint64_t)test1 << std::endl;
DIGIT_T test2 = ((~(DIGIT_T)0) >> bits);
std::cout << std::hex << (std::uint64_t)test2 << std::endl;

在這種情況下,輸出是預期的

ffffffff
7fffffff

但是當我取消注釋第一行並使用uint8_t時輸出​​為

ff
ff

這種行為給我帶來了麻煩。

謝謝您的幫助。

馬雷克

由於評論已經詳細解釋,這是由整數提升引起的。 這應該做的伎倆:

DIGIT_T test2 = ((DIGIT_T)(~(DIGIT_T)0) >> bits);

當然可以縮短為:

DIGIT_T test2 = (DIGIT_T)~0 >> bits;

現場演示

暫無
暫無

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

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