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

时间:2019-11-24 20:20:56

标签: c

我正在尝试编写一个程序,该程序从用户那里获取字符串输入'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,我想将“无符号短位”的值从全0更改为二进制的匹配值。

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

那行得通。

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

bits |= 1;