gpt4 book ai didi

c - 之间的区别!和〜

转载 作者:行者123 更新时间:2023-12-02 05:32:44 25 4
gpt4 key购买 nike

我正在实现一个简单的状态机,如下所示:

typedef void V_V_StateFunc(void);
static V_V_StateFunc *const fpCurrentStateFunc[STATE_ELEM_SIZE]={

&fn1,/*0*/

};

void Execute_StateMachine(const U8 bCurrent_StateIndex)
{
if(bStateIndex == (~bInvert_StateIndex))
{
if(bCurrent_StateIndex <= STATE_ELEM_SIZE)
{
fpCurrentStateFunc[bCurrent_StateIndex]();
}
else
{
/*this should never enter*/
}
}
else
{
/*this should never enter*/
}
}

void Update_State(U8 bNewIndex)
{
bStateIndex=bNewIndex; //bStateIndex & bInvert_StateIndex are globals
bInvert_StateIndex=(~bNewIndex);
}

在函数 Execute_StateMachine() 中,如果我检查 bStateIndex == (~bInvert_StateIndex),该值始终为 0,并且永远不会进入 if 语句,尽管 bStateIndex=0~bInvert_StateIndex=0(即 0 == 0,这是真的)。为什么会这样?

如果我更改 bStateIndex == (!bInvert_StateIndex),它会进入 if 语句。

这里的~!有什么区别?

最佳答案

! 运算符是逻辑非 运算符;例如表达式

if (!variable)

等于:

if (variable == 0)

~ 运算符是按位非 运算符;从而改变每一位的值。

 char variable = 1;           // value: 00000001
char variable2 = ~variable; // value: 11111110 = 254 (as noted by @Lundin; value = 11111111 11111111 11111111 11111110 and then truncated to 11111110 upon assignment to char)

关于c - 之间的区别!和〜,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37179153/

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