c语言中的移位操作符

本文详细解释了C语言中的左移和右移操作符,重点讨论了整数的补码、原码和反码在位操作中的应用,以及算术移位和逻辑移位的区别,特别提到了负数移位的限制。
摘要由CSDN通过智能技术生成

<<     左移操作符

>>     右移操作符

注意:移位操作符的操作数是整数。(是整数在内存中补码的形式

1.左移操作符:

左边抛弃,右边补0。
#include <stdio.h>
int main()
{
	int a = 5;         //由于a=5,a是正数所以a的原码,反码,补码相同
	                   //a=5  原码  00000000000000000000000000000101
	                   //     反码  00000000000000000000000000000101
	                   //     补码  00000000000000000000000000000101
	int b = a << 1;    //位操作符的对象是内存里面的反码形式
	                   //a=5         补码  00000000000000000000000000000101        左边抛弃,右边补0
	                   //移位符操作后补码  00000000000000000000000000001010        由于补码的首位是0,所以它的原码,反码,补码相同
					   //移位符操作后反码  00000000000000000000000000001010
					   //移位符操作后原码  00000000000000000000000000001010
	printf("a=%d\n", a);
	printf("b=%d\n", b);
	return 0;
}

2.右移操作符:

(1)算术移位:左边用原数值的符号位代替,右边丢弃。(大多数编译器使用                                 的)
 (2)逻辑移位:左边用0补充,右边丢弃。
#include <stdio.h>
int main()
{
	int a = -1;    //原码  10000000000000000000000000000001
	               //反码  11111111111111111111111111111110
	               //补码  11111111111111111111111111111111
	int b = a >> 1;              //移位后  11111111111111111111111111111111  
	
	return 0;      
}
 注意:移位操作符不能移动负数位。(例如:b=a<<-1;)

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值