小编use*_*282的帖子

uint8_t VS uint32_t的不同行为

我目前正在处理需要使用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;
Run Code Online (Sandbox Code Playgroud)

在这种情况下,输出是预期的

ffffffff
7fffffff
Run Code Online (Sandbox Code Playgroud)

但是当我取消注释第一行并使用uint8_t时输出​​为

ff
ff
Run Code Online (Sandbox Code Playgroud)

这种行为给我带来了麻烦.

谢谢您的帮助.

马雷克

c++ type-conversion

5
推荐指数
1
解决办法
299
查看次数

标签 统计

c++ ×1

type-conversion ×1