【问题标题】:How does boolean "&" and "&&" works for bit comparison?布尔值“&”和“&&”如何用于位比较?
【发布时间】:2013-06-19 09:00:16
【问题描述】:
PORTB = 0b11001011;
PORTC = 0b00111011;
if(PORTB & PORTC)
    {
     //do something
    }

//这个“如果”会是真的吗?编译器将如何检查它?

PORTB = 0b11001011;
PORTC = 0b00111011;
if(PORTB && PORTC)
    {
    //do something
    }

//这个“&&”怎么比较?如果我写“if(PORTB)”而不是编译器将如何评估它?

【问题讨论】:

    标签: boolean boolean-logic


    【解决方案1】:

    & 确实位,所以

    PORTB & PORTC == 0b00001011
    

    将其转换为布尔值会产生 true(非零)

    && 是布尔值,所以 PORTBtrue(非零),PORTCtrue,所以

    PORTB && PORTC
    

    收益true


    那么有区别吗?是的。 && 使用短路,而 & 没有。考虑以下几点:

    0 & some_complicated_expression
    0 && some_complicated_expression
    

    在第一种情况下,复杂的表达式将被计算。但是,由于&& 使用短路,复杂表达式不会在第二种情况下计算(表达式产生false,与复杂表达式的结果无关)。

    【讨论】:

    • @huester 所以如果我写简单地将二进制数评估为十进制,如果它不为零则为真,否则为假。这是吗?例如 ob00000011 = 3 所以这是真的吗?在你的例子中,如果复杂的表达式是真的那么??
    • @shafeeq 是的。复杂的表达式计算什么无关紧要,因为0 & X == 0,不管X的值是多少。
    • 你能告诉我如何评估二进制数的真假吗??
    • @shafeeq 0 => false 其他任何东西都是true
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-12
    • 2013-05-20
    • 1970-01-01
    • 1970-01-01
    • 2019-08-18
    • 1970-01-01
    相关资源
    最近更新 更多