C语言_左移<<运算符、右移>>运算符

我的一些注释看不懂的话,可以参看我上一篇blog(含基础知识) https://blog.csdn.net/xiaoyue_/article/details/115218001

#include<stdio.h>
int main()
{
	//  左移右移运算符
	
	// 正数 
	int m1=5;
	// 5的补码:   0000 0000 0000 0000 0000 0000 0000 0101 (正数的原码、反码、补码都相同)
	// 右移2位 >>  0000 0000 0000 0000 0000 0000 0000 0001 (补0) == 1 
	// 左移2位 <<  0000 0000 0000 0000 0000 0000 0001 0100 (空出来的补0) == 20  
	 
	printf("m1=5右移2位=%d\n",m1>>2);
	printf("m1=5左移2位=%d\n",m1<<2); 
	
	// 负数 
	int m2=-7;
	// -7的原码:1000 0000 0000 0000 0000 0000 0000 0111 (计算机都是用补码进行计算的) 
	// -7的反码:1111 1111 1111 1111 1111 1111 1111 1000 
	// -7的补码:1111 1111 1111 1111 1111 1111 1111 1001 (反码+1==补码) 
	
	//右移>>3位:1111 1111 1111 1111 1111 1111 1111 1111 (补码,需要转换为原码)
	// 补码转为原码: 
	//           1111 1111 1111 1111 1111 1111 1111 1111  (补码,先当作原码算,最后再换回去)
	//           1000 0000 0000 0000 0000 0000 0000 0000  (反码)
	//           1000 0000 0000 0000 0000 0000 0000 0001  (反码+1==补码,换回去,即为原码==-1) 
	
	//左移<<3位:1111 1111 1111 1111 1111 1111 1100 1000 
	//补码转换为原码:
	//           1111 1111 1111 1111 1111 1111 1100 1000  (同理)
	//           1000 0000 0000 0000 0000 0000 0011 0111  (反码,符号位不变,按位取反)
	//           1000 0000 0000 0000 0000 0000 0011 1000  (==-56) 
	
	// 验证 
	printf("m2=-7右移3位=%d\n",m2>>3);
	printf("m2=-7左移3位=%d\n",m2<<3); 
	return 0;
 } 

输出如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值