有符号数的移位操作—算术移位
众所周知 机器数(被数字化的数)为正时
原码 补码 反码 左移右移都补0
机器数为负时
左移右移的原理 是某数乘以或除以2^n
本质是小数点右移或左移 但数相对于小数点来说朝相反的方向移动
当原码 补码 反码 ×/÷2^n
符号位是不变的 只需移动数值部分
用双符号位来表示数呢
1、为什么最高符号位永远上真正的符号位
2、为什么在算术移位时 只有高符号位保留不变 而低符号位要参与移位
例:原码 00.001101
①乘以2^1 左移
00.001101+00.001101=00.011010
②乘以2^2 左移
00.011010+00.011010=00.110100
③乘以2^3 左移
00.110100+00.110109=01.1010000
低符号位已变
④乘以2^4 左移
01.101000*2=11.010000
终于☒好累 班主任叫我☒一会儿再写
最高符号位变了 若是直接舍去低位符号位的进位呢?01.010000
正数 但是移位后舍去了一位
③中01.101000除以2^1呢?
右移
01.101000*2^-1=00.110100
高位是补0的
②中00.110100除以2^1
00.110100*2^-1=00.011010
补码-00.001101—>11.110011
乘以2^1 左移 (00.011010)
2^2-00.011010=11.100110
乘以2^2 左移 (00.110100)
2^2-00.110100=11.001100
乘以2^3 左移 (01.101000)
2^2-01.101000=10.011000
将01.101000(10.011000)除以2^1 右移
—>00.110100
2^2-00.110100=11.001100
除以2^2 右移2位
原—>00.011010
2^2-00.011010=11.100110
除以2^3 右移3位 原—>00.001101 2^2-00.001101=11.110011