gpt4 book ai didi

c - 按位逻辑帧

转载 作者:行者123 更新时间:2023-11-30 20:50:51 25 4
gpt4 key购买 nike

您好,我有一个要求,例如寄存器的第一位应设置为 0(重置),并且 MSB 4 位每次都需要设置为 1。

我可以使用以下方法分两步完成此操作:

int val=0x0f;
val |=0xf0;
val &=~(1<<0);
printf("val is %d\n",val);

我期望两行代码被构建在 1 个逻辑中。我正在尝试,但正在从专家那里寻找一些好的逻辑。我有一个逻辑像 val = (val |=0xf0) & ~(1<<0);但不能使用这种类型的逻辑,因为使用的一些编码标准是 MISRA。请任何人给我一些更好的逻辑。

提前致谢。

最佳答案

完全不清楚你的意思,所以这里有一些 MISRA 代码审查:

  • int不符合 MISRA 标准。使用固定宽度的整数类型,最好从stdint.h开始.
  • 0x0f此类文字不符合 MISRA 标准。所有文字都需要有 uU后缀,甚至是十六进制的后缀。
  • val |=0xf0;不符合 MISRA 标准。不允许对有符号类型使用按位运算符。
  • val &=~(1<<0)不符合 MISRA 标准。有一条重要的 MISRA 规则指出 ~ 的结果运算符必须始终转换为预期类型(称为基础类型或有效类型,具体取决于 MISRA 版本)。此外,MISRA 不允许您在有符号类型上使用移位运算符。
  • printf不符合 MISRA 标准。 MISRA 不允许 stdio.h在生产代码中。

否则,代码是可读且清晰的。除了int这一事实不是 8 位宽,因此您关于设置 MSB 的讨论没有任何意义。

当然,如果您尝试将这些不合规的可读代码合并为不可读的单行代码,它将仍然不合规。您必须首先使原始代码符合 MISRA 标准。通过静态分析器实际运行它可能是明智的。

关于c - 按位逻辑帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38093490/

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