gpt4 book ai didi

c - 为什么宏值是 0 而不是 1?

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

这里base->leftNULL , 和 base->right->height0 :

((((base->left ? base->left->height : -1)) > ((base->right ? base->right->height : -1))) 
?
((base->left ? base->left->height : -1) + 1)
:
((base->right ? base->right->height : -1) + 1))

IMO 上述表达式的结果应该是 1 ,

但结果是 0当我打印出来的时候。

有谁知道原因吗?

这是gcc 4.3.2的错误吗?

更新

表情是怎么来的?
#define MAX_PLUS_1(a, b) (((a) > (b)) ? (a + 1) : (b + 1))
#define BINARY_TREE_HEIGHT(node) (node ? node->height : -1)
#define BINARY_TREE_SYN_HEIGHT(left, right) \
MAX_PLUS_1(\
BINARY_TREE_HEIGHT(left),\
BINARY_TREE_HEIGHT(right)\
)

真的是 BINARY_TREE_SYN_HEIGHT(base->left, base->right)
如果我更换 MAX_PLUS_1 问题就解决了带功能:
int MAX_PLUS_1(int a, int b){
return (((a) > (b)) ? (a + 1) : (b + 1));
}

最佳答案

从我们的评论讨论中的其他信息中,您的 height字段未签名。这意味着当您尝试将其与 -1 进行比较时,您最终会遇到麻烦 - (uint32_t)-1 == 0xFFFF_FFFF = 非常大的数字,因此在您不希望它的某个时候选择“左”分支而不是“右”分支。

写作 MAX_PLUS_1()由于您使用 int,因此函数可以解决或隐藏此问题。对于参数。这意味着比较是在 height 之间完成的。值和 (int)-1 ,这就是你想要的。

关于c - 为什么宏值是 0 而不是 1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7981303/

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