菜鸟笔记
提升您的技术认知

移位运算-ag真人游戏

移位运算:将二进制数值的各数位进行左右移位的运算。
移位有左移和右移两种情况。符号给别为 << (左移)和 >> (右移)。
移位运算有逻辑位移与算数位移两种:
逻辑位移:不涉及符号的变化,进行逻辑左移,逻辑右移时,移位后的数会相应的变大,缩小,空出来的低位或高位会由0填充。
例如: 将0000 0001左移两位,移位后变成0000 0100,该数由十进制数 1 扩大四倍变成了十进制数 4;相反的,0000 0100右移两位,变成0000 0001,则缩小了四倍。在二进制中,左移一位,得数比原数大两倍,右移一位 ,得数比原数小两倍。和十进制类似。
算数位移:这里着重介绍算数右移。将二进制数作为带符号的数值进行运算时,移位后要在空出的所有高位填充移位前的符号位的值(0或1),就叫做算数右移。 如果数值是用补数表示的负数值,那么右移后在空出来的高位补1。如果是正数,相应的补0即可。移位后数的大小变化同逻辑运算。
例如:1011 1111(-65)右移两位,由于该数是负数,所以在移位后,高位补1,即:1110 1111(-17)

另外,移位操作使最高位或最低位溢出的数字,直接丢弃就行。

注:只有在右移时才必须区分逻辑位移和算数位移。

下面介绍一下符号扩充
以8位二进制数为例,符号扩充就是指在保持值不变的前提下,将8位二进制数转换为16位或32位的二进制数。方法就是:用符号位的值填充高位即可。
例:将0111 1111转换位16位的二进制数:0000 0000 0111 1111
将1111 1101转换为16位的二进制数:1111 1111 1111 1101
不管是正数还是用补数形式表示的负数,都只需要用符号位的值填充高位就可以了。

网站地图