C语言按位左移运算规则

C语言按位左移运算符<<是怎么运算的?左移时最高位去哪里?假设移动一位?... C语言按位左移运算符<<是怎么运算的?左移时最高位去哪里?假设移动一位? 展开
 我来答
风若远去何人留
推荐于2017-09-14 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450129
专业C/C++软件开发

向TA提问 私信TA
展开全部

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 = 0x90
0x9e << 2 = 0x78

可以看到与我们计算结果是相符的。

zero_fn
推荐于2017-09-28 · TA获得超过2258个赞
知道小有建树答主
回答量:1173
采纳率:80%
帮助的人:456万
展开全部
左移一位后最右位补0,移几位补几个0;
左移时最高位在c里面丢弃了。
因为汇编里面只有两种移位:不带CY的循环移位 和带CY的循环移位。CY是进位标志位
不带CY的循环移位是假设左移的话,是把最左位放到最右位了。
带CY的把最左位放进CY,CY的原值放最右位。
C语言的左移运算可以理解为先将CY置0,然后执行带CY的循环移位操作。移位后CY的值是原来的最左位,CY里的0被移到最右位
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
华丽还健壮灬才俊4
2011-08-14
知道答主
回答量:4
采纳率:0%
帮助的人:3.4万
展开全部
<<1 相当于 乘2的1次方
从二进制来讲就是,所有位都向左移一位再在末尾加上一个0.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jiangxinyi21
2011-08-14 · TA获得超过165个赞
知道答主
回答量:108
采纳率:0%
帮助的人:48.3万
展开全部
楼上说得对,我再补充下
如果你想移位时最高位不丢弃,比如100,移位成001
那就得先把最高位的状态保存到某个变量中,然后再保存回最低位
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lp8800
2011-08-13 · TA获得超过703个赞
知道小有建树答主
回答量:528
采纳率:0%
帮助的人:324万
展开全部
最高位丢弃
移动N位补N个零,相当于乘以2的N次方
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式