龙空技术网

二进制的移位运算

学而时习之feng 180

前言:

而今兄弟们对“c语言左移运算符”可能比较看重,我们都需要了解一些“c语言左移运算符”的相关知识。那么小编在网络上搜集了一些对于“c语言左移运算符””的相关知识,希望各位老铁们能喜欢,朋友们一起来了解一下吧!

二进制数的移位运算有两种:左移<< , 右移>>

1、左移运算 <<:

a<<b,表示将二进制数a整体向左移动b位,右边的b位用0补充。

例如 :00000100<<2 =00010000

二进制100是十进制数4,左移2位得到10000为十进制数8。

若左移时舍弃的高位不包含1,那么每左移一位,相当于该数乘以2。a << b的值实际上就是a乘以2的b次方,因为在二进制数后添一个0就相当于该数乘以2。通常a<<1比a*2更快,因此程序中乘以2的操作可以用左移一位来代替。

2、右移运算符>>

a>>b,表示将二进制数a整体向右移动b位。右移运算分为两种:逻辑右移和算术右移

(1)逻辑右移,在右移过程中,左边位用0填充。

例如 :00001100>>2 =00000011

对于有符号数00001100十进制数12,逻辑右移2位,左边用0填充,变成了:00000011十进制数3。

(2)算术右移,在右移过程中,左边用符号位来填充。

例如 :10000100>>2 =11100001

00000100>>2 =00000001

对于有符号数10000100,算术右移2位,左边用1(1为符号位)填充,变成了:11100001。

而对于有符号数00000100,算术右移2位,左边用0(0为符号位)填充,变成了00000001。

在C语言中,右移运算符为算术右移运算符,即左边用符号位来填充。若右移时高位不是1(即不是负数),舍弃的低位不包含1,那么操作数每右移一位,相当于该数除以2,a>>b的值相当于a除以2的b次方(取整)。我们也经常用>> 1来代替除以2,用>>代替除法运算可以使程序效率大大提高。

总结

无论左移还是右移,都需要用0或者1去填充移动之后的空位。在左移的过程中,右边一律用0去填充。右移分为逻辑右移和算术右移。左补0还是补1得看被移数是正还是负。将一个数左移n位相当于将一个数乘以2^n,而将一个数右移n位相当于将这个数除以2^n。

常见二进制数移位的变换操作

标签: #c语言左移运算符 #c语言 算数右移 #c语言位移运算 #c语言指针右移一位 #整数右移