gpt4 book ai didi

C: switch case with hex value 忽略前面的 0

转载 作者:太空宇宙 更新时间:2023-11-04 04:27:10 24 4
gpt4 key购买 nike

我通过移动两个 uint8 变量来初始化一个 uint32 变量。

uint32_t test = ((first_uint8 << 16) | second_uint8);

在我的测试中,test的值应该是0x00170001 (0x17<<16|0x01)

然后它遇到了一个switch case

switch(test) {
case 0x00170001:
//do sth
break;
default:
//printf invalid
break;
}

它应该去第一种情况,然而,它总是会遇到默认情况。

然后我printf("%x", test),结果是0x170001,等于0x00170001。

最后我试着修改成这样:

switch(test) {
case 0x170001:
//do sth
break;
default:
//printf invalid
break;
}

然后它运行良好。

所以我很好奇结果。

  1. 对于 uint32_t 变量,为什么 0x170001 不等于 0x00170001?
  2. 如果是我没有把testmemset为0造成的,那么test也不应该等于0x170001,应该是0x11170001之类的乱码第一个字节。?
  3. 是编译器忽略了十六进制值前面的0造成的吗?我正在使用 Android NDK 编译我的 C 代码。

最佳答案

  1. for a uint32_t variable, why 0x170001 does not equal to 0x00170001?

确实如此。 0x170001、0x0170001 和 0x00170001 都相等。

2.if it is caused by I didn't memset test by 0, then test should also not be equal to 0x170001, it should be 0x11170001 or something with a garbage first byte.?

不是是由缺失memset引起的.任何作业test = X将设置 test 中的所有 位.

3.is it caused by the compiler ignores the 0 in the front of hex value? I'm using Android NDK to compile my c code.

这可以解释,但我对此表示怀疑。我认为您更有可能被其他东西欺骗了。您认为,也许您实际上并没有运行代码。如果真的证明写不写0x170001会有区别或 0x00170001 ,您应该将其报告为编译器错误 - 但在这样做之前请务必确定。

在这里查看使用 gcc 编译的工作示例: http://ideone.com/UR566Q

关于C: switch case with hex value 忽略前面的 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40298020/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com