C语言中按位数迹左移的运算符为<唤友<,其规则如下:
对于 *** 作a<<n,
1 按照二进制值每位向高位(书写上是向左)移动n位;
2 最高位(最左边的)n位舍去;
3 最低位(最右边)填加n个0.
简单起见,用char型举例如下:
例一
0x12 <<3 =>
B00010010 <<3 =>
B10010 000(这里最高位的三个0被舍去,其它依次左移,最低位补三个0) =>
0x90
即0x12 <<3 = 0x90
例二
0x9E <<2 =>
B10011110 <<2 =>
B01111000 (最高位10舍去,最低位补两个0)=>
0x78
可以编写如下程序验证:
#include <stdio.h>void check(char a, int n)
{
printf("0x%hhx << %d = 0x%hhx\n", a, n, a<<n)
}
int main()
{
check(0x12, 3)
check(0x9e, 2)
return 和毕槐0
}
其运行结果为
0x12 << 3 = 0x900x9e << 2 = 0x78
可以看到与我们计算结果是相符的。
C语言中,“<<”为左移运算符,“>>”为右移运算符。羡手
具体使用方法如下:
1、左移运算符(<<)
将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)。
例:a = a <<2 将a的二进制位左移2位,右补0,
左移1位后a = a * 2
若左移时舍弃的高位不包含1,则每左移一位,相当于该数乘以2。
2、右移运算符消凳(>>)
将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。
*** 作数每右移一位兄桥嫌,相当于该数除以2。
例如:a = a >>2 将a的二进制位右移2位。
左补0 or 补1 得看被移数是正还是负。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)