当前位置: 首页 > 知识库问答 >
问题:

uint8_t vs uint32_t不同的行为

司马钱明
2023-03-14

我目前正在进行一个需要使用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

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

谢谢你的帮助。

马雷克

共有1个答案

郭盛
2023-03-14

正如注释中已经详细解释的,这是由整数提升引起的。这应该可以达到目的:

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

这当然可以缩短为:

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

现场演示

 类似资料:
  • 其中一个测试通过,另一个给出以下错误: java.lang.ClassCastException:类org.springframework.http.ResponseEntity不能强制转换为类org.junit.jupiter.api.function.executable(org.springframework.http.ResponseEntity和org.junit.jupiter.api

  • 问题内容: 我试图用来创建我的,以确保我的构建/项目的质量。该项目也需要使用和。一切在我的本地计算机上都可以正常运行,但是现在我正在尝试使环境一致,可重现。当我尝试在新的虚拟机中运行时,会中断一个在本机中正常运行但 不在 新vm中运行的。 我检查了版本,,,(其)一切都是一样的。但是,我的Maven项目在此测试中失败了。 我在这里想念什么?任何想法,建议都会受到赞赏,因为我现在还没有想法,到目前为

  • 对于下面的代码,我得到了不同的输出 输出为: 现在美国/洛杉矶是GMT-8/UTC-8或PST。但当我将参数从GMT-8改为America/Los_Angeles时, 输出为: 不能使用类似PST的缩写,因为它已被弃用。同时,CST可以指中央标准时间和中国标准时间。 我的输入是-8、-9-14等,我希望在GMT/UTC之前知道我是否可以在给定日期获得DST激活。 请在这方面指导我。

  • 结果:1 2 3 有人能解释为什么会发生这种情况,以及我如何让非并行版本给出与并行版本相同的结果吗?

  • 我使用以下代码从图库中选取图像。当我用三星Galaxy S4测试它时,它直接进入Gallery,这就是我真正想要的。 但是,当我在LG Optimus II设备上测试我的代码时,它会显示一个对话框,提供一个选项来选择图库或图片。换句话说,它增加了一个我不想要的层。 这两款设备都具有 KitKat 4.4.2 操作系统。