5
Şu anda uint8_t kullanmam gereken proje üzerinde çalışıyorum. Bir problem buldum, birisi bana bunun neden olduğunu açıklayabilir mi?uint8_t VS uint32_t farklı davranış
//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
beklendiği gibi çıktı bu durumda
ancak ilk hattı ve ben çıkış uint8_t kullandığınızda bu davranış bana sıkıntı neden olan
ff
ff
olduğunu.
Yardımlarınız için teşekkür ederiz. Zaten detaylı olarak izah yorumlandığı gibi Marek
'~ (DIGIT_T) 0' ~ (int) (DIGIT_T)' denktir Bu hile yapmak gerekir 0 'veya sadece ~ ~ 0 '. Hem C hem de C++ kurallarına göre, aritmetik ve bitsel işleçlerin argümanları, bütünleşik promosyonlara tabidir. Bkz. [İntegral tanıtım paragrafı] (http://en.cppreference.com/w/cpp/language/implicit_conversion). – ach
İntegral promosyon kuralları, 'DIGIT_T'' int' yerine daha küçük bir aralığı destekliyorsa, '~ (DIGIT_T) 0'' '(int) 0' değerine eşittir. – Peter
posta kodu "C++" değil "C", "c" etiketi – user3629249