【发布时间】:2019-04-12 12:05:05
【问题描述】:
我正在对一些代码进行故障排除,我遇到了这一行
uint8var = ((constUint8[0]) >> 7) & 0x01u;
我想知道正确的做法是什么。考虑到我将 uint8 向右移动 7 位,在编写符合 MISRA 的代码时,& 0x01u 是否是正确实施所必需的?
【问题讨论】:
-
我不明白你关心的是什么。你能详细说明一下吗?
-
我不知道这是否是一个正确的做法,虽然
& 1会更易读IMO,如果constUint8[0]是8 位,整个操作是多余的。 -
我的编译器将
(x >> 7) & 0x01、x >> 7和!!(x & 0x80)(其中x是一个无符号字符)转换为相同的指令...如有疑问,请检查程序集。跨度> -
@Shawn:检查汇编代码并不能回答有关此代码是否符合 MISRA 规则的问题。 MISRA 关注源代码是否会在所有适用的 C 实现下产生所需的结果。一种实现在一种情况下产生所需结果的事实并不能证明所需的属性。
-
变量有哪些类型,
uint8_t?