如何解决我可以使用“ MAX”宏来检查是否设置了所有位吗?
我最近在一次采访中提出了一个功能,该功能可以检查是否设置了uint32_t中的所有位。
我写了以下代码:
int checkStatus(uint32_t val) {
return val == UINT32_MAX;
}
我假设如果未设置一位,则返回0;如果两个值相同,则返回1。
由于我在其他任何地方都没有看到此解决方案,因此我认为这是错误的。但是我不明白为什么。当我这样做时,我在想:“如果所有位都设置为1,则该值应该是表示的最大无符号整数,否则就没有。”您能告诉我它是否不正确以及为什么吗?
解决方法
此处使用UINT32_MAX
的问题在于“最大值”是一个算术概念,而不是按位逻辑概念。尽管UINT32_MAX
实际上在大多数情况下都表示(无符号)数字0xFFFFFFFF,但这只是二进制补码算法中数字表示方式的结果。
在这里使用UINT32_MAX
可能会误导读者,因为它具有算术而不是按位操作的含义。
在C编程中,我们都习惯于将位模式表示为十六进制数字。数字“ 0xFFFFFFFF”立即表示设置所有位的概念,而UNIT32_MAX
并未设置。同样,即使在实践中,值“ 0xFFFFFFFF”在算术表达式中表示“ -1”也可能不合适。
因为我大部分时间都是在寻找别人的代码中的错误,所以我敏锐地意识到表达同一事物的不同方式在表达能力上的差异。有时出于效率低下的原因,我们不得不写出缺乏表现力的东西;但是我不认为我们应该仅仅为了它。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。