概述
移位操作只是简单地把一个值的位向左或右进行移动。
1. 左移位
符号:<<
在左移位中,之最左边的几位被丢弃,右边多出来的几个空位则由0进行补齐。
例如:01101101 << 3
结果:01101000
2. 右移位
符号:>>
逻辑移位:左边移入的位用0填充
算术移位:左边移入的位由原先该值的符号位决定,符号位为1则移入的位均为1,符号位为0则移入的位均为0,这样能够保持原数的正
负形式不变。
例如:10010110 >> 2
逻辑移位:00100101
算术移位:11100101
左操作数的值将移动由右操作数指定的位数。两个操作数都必须是整型类型。
标准规定无符号值执行的所有移位操作都是逻辑移位。但对于有符号值,到底是采用逻辑移位还是算术移位则取决于编译器。
警告:
注意类似这种形式的移位:
a<<-5
左移-5位表示什么?是表示右移5位吗?还是根本不移位?在某台机器上,这个表达式实际执行左移27位的操作。
标准规定这类移位的行为是未定义的,所以它是由编译器决定的。然而,很少有编译器设计者会清楚地说明如果发生这种情况将会怎样,所以它的结果很可能没有什么意义。因此,应该避免使用这种类型的移位,因为它们的效果是不可预测的,使用这类移位的程序是不可移植的。
如果是十进制数进行移位,会先变换成二进制数进行移位,然后及那个结果在转换为十进制数。
例如:10 << 2
10的二进制数为:1010
结果:40(101000)
左移位和右移位的应用:
计数一个值中值为1的位的个数
int count_one_bits( unsigned value)
{
int ones;
for(ones = 0; value != 0; value = value >> 1)
if( value % 2 != 0 )
ones += 1;
return ones;
}
最后
以上就是要减肥向日葵为你收集整理的C语言中的左移位和右移位的全部内容,希望文章能够帮你解决C语言中的左移位和右移位所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复