目录
移位运算
1、左移运算:
x<<k 即 x左移位,并在右端补零。
2、右移运算:
逻辑右移:
x>>k 即 x右移k位,并在左端补零。
算术右移:
x>>k:x右移k位,并在左端补最高有效位的值。
演算
下表为对一个8位参数x的两个不同的值做不同的一位操作得到的结果:
操作 |
值 |
参数x | [01100011][10010101] |
x<<4 | [00110000] [01010000] |
x>>4(逻辑右移) | [00000110][00001001] |
x>>4(算术右移) | [00000110][11111001] |
在C语言中,使用算术左移和逻辑右移 均补零
运行代码
#include <stdio.h>
int main() {
int n;
scanf("%d",&n);
int b = 2;
b = b<<(n-1);
printf("%d",b);
return 0;
}
注释
在2进制中,2的表示为00000010
我们只使用移位符来完成2的n次方,仅需使这个1往左移动。
如4:00000100; 8:00001000
要注意为什么是(n-1)
因为2本身已经在第二位了,是2的1次方。
位移运算示例
右移
如下为5(0000 0101)右移2位 得1(0000 0001) 即
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main() {
int n;
scanf("%d", &n);
int b = 5;
b = b >> n;
printf("%d", b);
return 0;
}
左移
如下为5(0000 0101)左移2位 得20 (0001 0100) 即
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main() {
int n;
scanf("%d", &n);
int b = 5;
b = b << n;
printf("%d", b);
return 0;
}
哥们又帅了,加油加油,敲代码真的会变帅!