我是靠谱客的博主 沉静老师,最近开发中收集的这篇文章主要介绍二进制正负数转换和移位的规则详解,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1、转换规则

二进制整数都是以补码的形式出现的
正数的原码、反码、补码都相同
负数的反码就是正数的原码先把最高位变为1然后其余的位取反
负数的补码就是该负数的反码加1。

2、二进制的移位规则

<<和>>

二进制数,在向右移1位近似表示除以2,但是十进制的奇数转化为二进制数后,在向右移时,最右边的1将被直接抹去,说明向右移对于奇数并非完全近似于除以2。
左移 <<,和右移>> 两种运算中,符号位均参与移动,除了负数右移,高位补1之外,其他情况均在空位处补0。
在这里插入图片描述在左移运算中,由于符号位均参与向左移动,如上图,最左位可能是1或者是0,正数向左移动的结果可能是正,也可能是负;负数向左移动的结果同样可能是正,也可能是负。

>>>>无符号右移

注意不存在<<<无符号向左移动的运算方式!
对于三个大于号的>>>无符号向右移动时,正负数高位均补0,造成的结果就是:
正数不断向右移动的最小值是0
负数不断向右移动的最小值是1
无符号意即藐视符号位,符号位失去特权必须像其他平常的数字位一起向右移动,高位直接补0,根本不关心是正数还是负数。此运算常用在高位转低位的场景中。
在这里插入图片描述为何负数不断地无符号向右移动的最小值是1呢?在实际编程中,位移运算仅作
用于整型(32位)和长整型(64位)数上,假如在整型数上移动的位数是32位,无论是否带符号位以及移动方向,均为本身。因为移动的位数是一个mod32的结果,
即35>>1与35>>33是一样的结果。如果是长整型,mod64,即35<<1与35<<65的结果是一样的。负数在无符号往右移动63位时,除最右边为1 外,左边均为0,达到最小值1,如果>>>64,则为其原数值本身。

最后

以上就是沉静老师为你收集整理的二进制正负数转换和移位的规则详解的全部内容,希望文章能够帮你解决二进制正负数转换和移位的规则详解所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(57)
立即
投稿
返回
顶部