gpt4 book ai didi

c - C 中的三元运算符参数评估

转载 作者:太空宇宙 更新时间:2023-11-03 23:37:07 26 4
gpt4 key购买 nike

我一直在使用一些代码来确保 MISRA 合规性。这段代码的问题是

Operands shall not be of an inappropriate essential type. The operand of the ? operator is of an inappropriate essential type category unsigned. 

我假设问题出在第一个参数是无符号数据类型,而不是 bool 值,这意味着下面的修复会起作用。

原创,

 return (uint32Var & 0x80000000u) ? 0u : 1u;

我对代码的更改,

 return ( (uint32Var & 0x80000000u)!=0u ) ? 0u : 1u;

这是一个正确的改变吗?我担心更改代码的功能,但据我所知,至少在 if 逻辑中,操作数被评估为 numVar != 0if ( numVar )里面运营商。

最佳答案

那是安全的。

您将比较无符号的 32 位:

(uint32Var & 0x80000000u)

对于 unsigned int:

0u

Usual arithmetic conversions apply 以确保无论此处涉及的实际类型如何,您将比较至少足以包含无符号 32 位的类型的值。

(uint32Var & 0x80000000u) 如果等于 0 则为假,否则为真。将值与 0 进行比较会产生效果,如果比较相等则产生 0,否则产生 1 是等效行为。


另外请注意,您最终为三元运算符的第一个操作数使用的值不是 bool,而是 int!= 运算符生成 int01

关于c - C 中的三元运算符参数评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57161821/

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