c语言 a<<=1与a<<1有什么区别?
2022-12-11 · 百度认证:北京惠企网络技术有限公司官方账号
1.运算步骤长度不同
<<是左移运算符,=是赋值运算符,前者的优先级要大于后者。因此在a<<=1在这个表达式当中共进行了两步:
第一步是a<<,a(即二进制的值)向左移。
左移运算的两个操作数应为整数类型。第一个操作数是要进行移位操作的数,第二个操作数指定第一个操作数移动的位数。如果第二个操作数等于0则不发生任何移位。因此a不发生位移。
第二步是=1,将1赋予给a,也就是a=1。
而a<<1只发生了左移,也就是只进行了一步。
2.最后a的值不同
上面提到a<<=1的第二步是将1赋予给a,也就是a=1。因此最后a的值是1。
而a<<1将a(即二进制的值)向左移动了一位,高位补0,低位遗弃,但是a的值不变,因此两个a的值不同。
3.运算结果不同
最后a<<=1整个表达式的值为1,而a<<1表达式的值等于变量a(即二进制的值)向左移动了一位之后的值。
扩展资料:
<<、=运算符在C语言中的功能
1.<<的功能
把“<<”左边的运算数的各二进位全部左移若干位,由“<<”右边的数指定移动的位数,高位丢弃,低位补0。如a<<b,则将数据a格比特位向左移b位,即左移a位就是将数据扩大至原来的2的a次方倍。
2.=的功能
对对象进行赋值,如a=b,则a的值为b。在c语言中也常常将赋值运算符=与其他的运算符结合起来,表示按照优先级顺序处理对象后,再对对象进行赋值。
参考资料:百度百科-左移运算符