gpt4 book ai didi

检查 C 中的位 - 错误答案?

转载 作者:太空宇宙 更新时间:2023-11-04 05:25:52 25 4
gpt4 key购买 nike

我正在尝试用 C 编写一个(非常)短的代码作为修订。

根据我的教育和其他帖子,例如;

How do you set, clear, and toggle a single bit?

下面的代码应该将值“1”放入变量ready中,然而,它放置了值64。所有其他文章都指出只是放置了测试位的值,而不仅仅是两者的结果numbers (number and (1 << x) ) and'ed together - 这确实是 64!是这种情况还是我只是犯了错误的一步?

uart->status |= (1<<6); //Set bit 6 to 1 

char input = 0;

int ready = (uart->status) & (1<<6); //Should mean ready = 1?, a

if(uart->status & (1<<6) == 1) { //ready actually = 64
input = uart->rx;
} else {
input = 0;
}

非常感谢!

大卫

最佳答案

& 运算符执行按位与运算——即它独立地对每一位进行操作,并在相应的位置返回结果位。因此,如果第 6 位是其两个参数均为 1 的唯一位置,它自然会返回 64。

您可能会将它的行为与 && 的行为混淆(它有效地将其输入和输出强制为 bool 值,因此将返回 1 或 0)。

所以你的代码中的问题纯粹是你在与值 1 进行比较。你可以改为说

if(uart->status & (1<<6) != 0)

正如 user3159253 指出的那样。甚至,当然,只是

if( uart->status & (1<<6) )

关于检查 C 中的位 - 错误答案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27972973/

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