gpt4 book ai didi

c - 有符号/无符号不匹配

转载 作者:行者123 更新时间:2023-12-04 11:19:22 24 4
gpt4 key购买 nike

我很难理解我在代码中遇到的问题的性质。线路

if ((struct.c == 0x02) && (struct2.c == 0x02) && (struct.s == !struct2.s))
{/**/}

其中 cintsuint64_t 产生

C4388:'==' signed/unsigned mismatch

警告。我明白那个警告是什么,我在这里看不到是什么触发了它。我错过了什么?

最佳答案

直接引用 C11 标准,章节 §6.5.3.3,(强调我的)

The result of the logical negation operator ! is 0 if the value of its operand compares unequal to 0, 1 if the value of its operand compares equal to 0. The result has type int....

因此,逻辑 ! 运算符的结果是 int,所以 !struct2.s 产生 int值和表达式

....(struct.s == !struct2.s)

创建问题。


注意 1:

我猜你使用 struct 作为结构名称只是为了说明目的,否则 structC 中的保留关键字你不能使用那作为一个变量名。


注意 2:

也许您的实际意思是 (struct.s != struct2.s),但这也只是一个(可能)的猜测。


FOOTNOTE::较早的问题也标记为 C++,将其作为脚注移动但保留信息仅供引用。
关于C++!的返回类型是bool。引用:C++11,第 5.3.3 章(再次强调我的)

The operand of the logical negation operator ! is contextually converted to bool(Clause 4); its value istrueif the converted operand isfalseand false otherwise. The type of the result is bool.

关于c - 有符号/无符号不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31028700/

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