• Java按位取反操作~


    1、前言

    计算机存储的整型数据是存储的2进制,而此2进制并不是此10进制数直接对应的2进制数(原码),而是存储的此2进制数的补码。
    所以,取反(~)是对补码的按位取反操作,而要从原码转换成补码,必须要先从原码转换成反码,再从反码转换成补码才可以。

    注意:2进制的最高位是符号位(在最左侧)

    2、看两个例子 :

    问题1: ~0的值是多少?

        以正整数 0(10进制)为例,要得到~0的结果,操作步骤如下 :
        原码 0000 0000 把10进制数转换成8位的2进制数
        反码 0000 0000 正数的反码是原码
        补码 0000 0000 正数的补码也是原码
    
        按位取反得到新补码 1111 1111 将补码按位取反,注意此时最高位从0变成了1,即已变成负数
        新反码 1111 1110 再将[按位取反]后的新补码,转换成新反码,注意非常关键的一个变换过程:现在是将负数从补码转反码;那么需要将补码的最低位-1,同时符号位(1表示负,0表示正)要保持固定不变
        新原码 1000 0001 再将新反码转新原码,注意是负数,符号位要固定不变,最后得到结果就是 -1 ,到此分析完毕。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    问题2: ~-1的值是多少?

        负整数-1(10进制)为例 ,要得到~-1的结果,操作步骤如下 :
        原码 1000 0001 把10进制数转换成8位的2进制数
        反码 1111 1110 负数的反码是,符号位(1表示负,0表示正)固定不变,其他位按位取反(通俗来讲就是把0变成1,1变成0)
        补码 1111 1111 负数的补码是,符号位(1表示负,0表示正)固定不变,但是要在反码的最低位+1(最右侧+1)
    
        按位取反得到新补码 0000 0000 按位取反后的补码(此步骤核心就是对应,这个操作符~ 的操作),我们需要将补码转换成反码,在转换成原码,最后转换成10进制数结果
        注意上面[按位取反]步骤执行后,最高位从1变成了0,即已变成正数,后续我们要按照正数的反码、补码来进行操作
        新反码 0000 0000 正数的反码与补码、原码是相同的
        新原码 0000 0000 正数的反码与补码、原码是相同的
        获取10进制数结果,就是0,到此分析完毕
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    问题3: ~1的值是多少?

        以正整数 1(10进制)为例,要得到~0的结果,操作步骤如下 :
        原码 0000 0001 把10进制数转换成8位的2进制数
        反码 0000 0001 正数的反码是原码
        补码 0000 0001 正数的补码也是原码
    
        按位取反得到新补码 1111 1110 将补码按位取反,注意此时最高位从0变成了1,即已变成负数
        新反码 1111 1101 再将[按位取反]后的新补码,转换成新反码,注意非常关键的一个变换过程:现在是将负数从补码转反码;那么需要将补码的最低位-1,同时符号位(1表示负,0表示正)要保持固定不变
        新原码 1000 0010 再将新反码转新原码,注意是负数,符号位要固定不变,最后得到结果就是 -2 ,到此分析完毕。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
  • 相关阅读:
    JCF之List集合实现——Vector
    Win10 如何禁用BitLocker加密cmd命令
    〖Python 数据库开发实战 - MySQL篇㉜〗- 事务的隔离级别
    Hadoop、Hive、Spark 之间的关系
    力扣第102题 广度优先搜索 二叉数 c++
    Docker 安装Redis
    msvcp71.dll丢失的解决方法分享,全面分析msvcp71.dll丢失原因
    flex布局与float布局
    2023年天津中德应用技术大学专升本考试招生计划及报考范围
    java计算机毕业设计高校考务管理MyBatis+系统+LW文档+源码+调试部署
  • 原文地址:https://blog.csdn.net/huangbin123/article/details/127787351