2.2.3移位运算

简介: 2.2.3移位运算

移位运算

1.1算数移位

  • 源码的算术移位:符号位置保持不变,仅对数值进行移位

右移:高位补0,低位舍弃。若舍弃的位=0,则相当于/2,若舍弃的不等于0,就会丢失精度

把0000101.0 向右移动一位 000010.1 小数点后面的会1被舍弃,导致精度不足

左移:低位补0,高位舍弃,若舍弃的位=0,相当于*2,若舍弃的位不等于0,则会严重丢失精度

  • 反码的算术移位

正数的反码与原码相同

右移:高位补0,低位舍弃 左移:低位补0,高位舍弃

负数的反码与原码相反 右移:高位补1,低位舍弃 左移:低位补0,高位舍弃

  • 补码的算术移位

正数的补码 右移:高位补0,低位舍弃 左移:低位补0,高位舍弃

负数的补码=反码末尾加1 右移:高位补1,低位舍弃 左移:低位补0,高位舍弃

左移相当于x2,右移相当于除2

因为位数有限,无法用算数移位精确的等效乘除法

1.2 逻辑移位

逻辑右移: 高位补0,低位舍弃

逻辑左移:低位补0,高位舍弃

Eg:在颜色代码中RGB(102,139,139) 二进制代表(01100110,100001011,10001011)

1.3 循环移位

在做一些运算时,数值会溢出,多出一个进位

在进行循环移位时,右移会将原本的进位放在末尾的位置,新进的溢出位,代替原本的进位

变成

相关文章
|
1月前
【编程基础知识】正数负数的二进制位运算(左移 右移 无符号右移)
正数和负数需转换成二进制后进行移位运算。左移低位补0,不影响符号位;右移符号位跟随移动,最高位还原为原符号位;无符号右移高位补0,适用于负数处理。
73 0
|
6月前
|
存储
算数移位,逻辑移位以及循环移位
算数移位,逻辑移位以及循环移位
106 0
|
6月前
|
算法 测试技术 C++
【位运算 拆位法】1835. 所有数对按位与结果的异或和
【位运算 拆位法】1835. 所有数对按位与结果的异或和
|
存储
5.2.5_定点数的移位运算
计算机组成原理之定点数的移位运算
321 0
5.2.5_定点数的移位运算
位运算中的按位与(&),按位或(|),按位异或(^)
位运算中的按位与(&),按位或(|),按位异或(^)
129 0
位运算中的按位与(&),按位或(|),按位异或(^)
移位运算符的小技巧
快速学习移位运算符的小技巧
|
C语言 编译器
C语言里的左移和右移运算
在用gcc编译这段程序的时候编译器会给出一个warning,说左移位数>=类型长度.那么实际上i,j移动的就是1位,也就是33%32后的余数.在gcc下是这个规则,别的编译器是不是都一样现在还不清楚.
2098 0
使用^、&(异或、并且)位运算 实现算数加法(+)
用位运算即是计算机的运算规则,而计算机只懂得二进制,所以位运算使用的进制是二进制。
163 0
使用^、&(异或、并且)位运算 实现算数加法(+)