位移位运算符

C语言中出现的,不知道它的运算原理。希望能有人解惑,谢谢!... C语言中出现的,不知道它的运算原理。希望能有人解惑,谢谢! 展开
 我来答
浅不可测
2009-07-27
知道答主
回答量:11
采纳率:0%
帮助的人:0
展开全部
要了解移位运算,需明白二进制计数

以单字节为例,比如0x55=0b01010101

如果将该数值左移1位,就变成了 0b10101010(最右边这个0是移空了以后补的),这个数值是0xaa

从数学上看,左移1位等于乘以2,右移1位等于除以2,然后再取整,移位溢出的丢弃。

例如:

unsigned char a;
a=1; //0b00000001
a<<=1; //0b00000010 a左移1位等效于a=a*2
a<<=2; //0b00001000 a左移2位等效于a=a*2的2次方(4)
a<<=3; //0b01000000 a左移1位等效于a=a*2的3次方(8)
a<<=1; //0b10000010 a左移1位等效于a=a*2
a<<=1; //0b00000000 a再次左移1位后溢出了,结果变成0了

c=a<<b; 在变量都是8位的时候,等效于 c=(a*pow(2,b))%256
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
干筠濯凝海
2020-07-08 · TA获得超过3698个赞
知道大有可为答主
回答量:3108
采纳率:29%
帮助的人:191万
展开全部
要了解移位运算,需明白二进制计数
以单字节为例,比如0x55=0b01010101
如果将该数值左移1位,就变成了
0b10101010(最右边这个0是移空了以后补的),这个数值是0xaa
从数学上看,左移1位等于乘以2,右移1位等于除以2,然后再取整,移位溢出的丢弃。
例如:
unsigned
char
a;
a=1;
//0b00000001
a<<=1;
//0b00000010
a左移1位等效于a=a*2
a<<=2;
//0b00001000
a左移2位等效于a=a*2的2次方(4)
a<<=3;
//0b01000000
a左移1位等效于a=a*2的3次方(8)
a<<=1;
//0b10000010
a左移1位等效于a=a*2
a<<=1;
//0b00000000
a再次左移1位后溢出了,结果变成0了
c=a<<b;
在变量都是8位的时候,等效于
c=(a*pow(2,b))%256
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式