关于负数的右移与无符号右移运算小结
来源:互联网 发布:战区 知乎 编辑:程序博客网 时间:2024/06/06 02:14
对于带符号右移,若为负数,则在存储时首位表示符号位,其值为1,表示该值是负数的移位,在移位过程中,高位补1,若符号位是0,表示是正数,在移位过程中高位补零,两者的前提是符号位保持不变:
对于负数的右移:因为负数在内存中是以补码形式存在的,所有首先根据负数的原码求出负数的补码(符号位不变,其余位按照原码取反加1),然后保证符号位不变,其余位向右移动到X位,在移动的过程中,高位补1.等移位完成以后,然后保持符号位不变,其余按位取反加1,得到移位后所对应数的原码。即为所求。
举例1:
-100带符号右移4位。
-100原码: 10000000 00000000 00000000 01100100
-100补码: 保证符号位不变,其余位置取反加1
11111111 11111111 11111111 10011100
右移4位 : 在高位补1
11111111 11111111 11111111 11111001
补码形式的移位完成后,结果不是移位后的结果,要根据补码写出原码才是我们所求的结果。其方法如下:
保留符号位,然后按位取反
10000000 00000000 00000000 00000110
然后加1,即为所求数的原码:
10000000 00000000 00000000 00000111
所有结果为:-7
举例2:
-100无符号右移4位。
-100原码: 10000000 00000000 00000000 01100100
-100补码: 保证符号位不变,其余位置取反加1
11111111 11111111 11111111 10011100
无符号右移4位 : 在高位补0
00001111 11111111 11111111 11111001
即为所求:268435449
总结:正数的左移与右移,负数的无符号右移,就是相应的补码移位所得,在高位补0即可。
负数的右移,就是补码高位补1,然后按位取反加1即可。
- 关于负数的右移与无符号右移运算小结
- 关于负数的右移与无符号右移运算小结
- 关于负数的右移与无符号右移运算小结
- 关于java中位运算的左移、右移、无符号右移
- 运算符 左移<<, 右移>>, 无符号右移>>>
- 无符号右移运算符 (>>>)
- >>> java的扩展移位运算符 无符号右移
- 负数的带符号和不带符号的右移运算
- 负数的带符号和不带符号的右移运算
- 负数的右移
- 负数的左移与右移
- 负数的左移与右移
- java的无符号右移
- java 无符号右移
- java中右移运算符>>和无符号右移运算符>>>的区别
- 有符号右移,无符号右移,左移
- JAVA_SE系列:16.位运算符之左移、右移、无符号右移
- Java 位运算符:左移 << 右移 >> 无符号右移 >>>
- java对象转xml
- arduino激光雕刻机
- 用async声明一个函数,其实相当于是再声明一个线程。调用则启动了线程
- scp 用法示例
- 微信公众平台开发有哪些要注意的
- 关于负数的右移与无符号右移运算小结
- Spring框架研究总结之IOC
- QMap 和 QHash 区别
- 用对象找出10个整形数组中的最大元素。
- VS2015安装Qt5的Add-in的问题与解决方案【记录贴】
- MySQL比like语句更高效的写法locate position instr find_in_set
- 二分查找(迭代和递归)
- 我的Latex中文报告模板
- 【从C到C++学习笔记】程序/结构化程序设计/面向对象的程序设计