6"):puts("6 .但我有疑问。 b=-6ren">
gpt4 book ai didi

c - C 中的有符号整数

转载 作者:太空狗 更新时间:2023-10-29 15:51:16 25 4
gpt4 key购买 nike

#include<stdio.h>

int main()
{
unsigned int a=6;
int b=-20;
(a+b>6)?puts(">6"):puts("<=6");
return 0;
}

以上代码输出>6 .但我有疑问。 b=-20将保持负值 ( -18 )在执行 2 的补码之后,因为它是一个带符号的整数。所以它应该输出 <=6但它的输出为 >6 .

最佳答案

来自 C99 标准,第 6.3.1.8 节(“常规算术转换”):

if the operand that has unsigned integer type has rank greater or equal to the rank of the type of the other operand, then the operand with signed integer type is converted to the type of the operand with unsigned integer type.

基本上,就您的示例代码而言,unsigned intint 具有相同的等级,因此它等同于:

(a + (unsigned int)b > 6)

要修复它,您需要明确地向另一个方向转换,即:

((int)a + b > 6)

关于c - C 中的有符号整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7222859/

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