【发布时间】:2017-03-05 07:56:10
【问题描述】:
我正在尝试让我的程序运行,我将位向左移动并将移动的位添加到右侧。例如00111000,如果你把它向左移动4个位置,结果应该是10000011。我怎样才能使这项工作,我知道我需要使用按位或。我在下面添加了主要功能。
#include <stdio.h>
#include <stdlib.h>
void printbits(int b){
int i;
int s = 8 * (sizeof b) - 1; /* 31 if int is 32 bits */
for(i=s;i>=0;i--)
putchar( b & 1<<i ? '1' : '0');
}
int main(){
char dir; /* L=left R=right */
int val, n, i;
scanf("%d %d %c",&val, &n, &dir);
printbits(val);putchar('\n');
for (i=0; i<10; i++){
if (dir=='L' || dir =='l')
rotateLeft(&val, n);
else
rotateRight(&val,n);
printbits(val); putchar('\n');
}
return;
}
这是 rotateLeft 和 rotateRight 函数。
#include <stdio.h>
#include <stdlib.h>
void rotateLeft(int *val, int N){
int num = val[0];
int pos = N;
int result = num << pos;
}
void rotateRight(int *val, int N){
int num = val[0];
int pos = N;
int result = num >> pos;
}
【问题讨论】:
-
这个“将移位的位加到右边”是什么意思?左右移动然后求和?
-
A similar question。请注意,如果您在签名的
int的符号位中折腾,那么您是在没有手电筒的情况下走在漆黑的悬崖边缘。 -
@BenceKaulics 如果将其向左移动 4 个位置,则应将这些 1 添加到右侧。我很难解释,对不起:S
-
@Sullivan 没问题,我应该通过你的例子理解它。
标签: c algorithm rotation bit-manipulation