我是C的新手,我在位操作方面遇到了麻烦,我读了很多关于它的信息,看起来它是C的难点之一,有人可以解释我如何收集32位然后将它们分配给无符号的整数。
unsigned int collect_bits; // define var
for (int i = 0;i < 31; i++) // loop for 32bits
{
collect_bits &= HAL_GPIO_ReadPin (GPIOC,GPIO_PIN_9); //read PORTC current bit and assign it to collect_bits
}
我知道上面的代码是错误的,但我不知道如何将PORT中的位分配给var
答案 0 :(得分:3)
您的代码有3个问题:
collect_bits
假设HAL_GPIO_ReadPin
返回0
或1
,您可以这样做:
unsigned int collect_bits = 0;
for (int i = 0; i < 32; i++)
{
unsigned int current_bit = HAL_GPIO_ReadPin (GPIOC,GPIO_PIN_9);
collect_bits |= current_bit << i; // Shift current_bit to position i and
// put it into collect_bits using bit wise OR
}
现在从引脚读取的第一位位于collect_bits
的位位置0,从引脚读取的第二位位于collect_bits
的位位置1,依此类推。
BTW:您必须确保unsigned int
是系统上的32位
答案 1 :(得分:0)
collect_bits未初始化,
试试这个
unsigned int collect_bits = 0; // define var
for (int i = 0;i < 31; i++) // loop for 32bits
{
collect_bits |= HAL_GPIO_ReadPin (GPIOC,GPIO_PIN_9); //read PORTC status and assign it to collect_bits
}