按位运算左移并更改最右边的位?

问题描述 投票:1回答:2

我正在尝试编写一个程序,该程序从用户那里获取字符串输入'0'和'1',然后使用给定的字符串来更改另一个变量的每一位。

char input[20];
unsigned short bits = 0;

printf("Enter a binary string of 16 bits.\n");

fgets(input, 20, stdin);
input[strlen(input) - 1] = '\0';

是我必须从用户那里获取并存储两个字节的字符串的地方。然后,我想使用该字符串并操纵变量“位”以匹配输入的内容。

因此,如果用户输入10011001 10011001,我想将'unsigned short bits'的值从全0更改为二进制的匹配值。

我现在的想法是,我可以在每次通过时循环遍历输入字符串和左移“位”,但据我所知,左移将始终丢弃最左边的位,并添加0作为最右边的位。有没有一种方法可以使用我不知道的一些按位命令将1作为最左边的位添加,以便如果循环在字符串中看到“ 1”,则会在最右边的位添加1?

c
2个回答
1
投票

使用bits = (bits << 1);移0。使用bits = (bits << 1) | 1;移1。


0
投票

那会工作。

在循环中,如果字符为bits,则首先将OR左移,然后是1 1:

bits |= 1;
© www.soinside.com 2019 - 2024. All rights reserved.