• 【Java基础】位运算符与原码,补码,反码


    目录

    计算机进制基础

    位运算符

    原码,补码和反码


    计算机进制基础

    计算机汇编语言中,计算进制分为四种:二进制,八进制,十进制和十六进制

    二进制 B (binary)

    逢二进一,基数为2,数值部分用两个不同的数字0、1来表示。

    示例:7 = 0b0111,0b表示二进制
    八进制 O (octal)

    逢八进一,基数为8,数值部分分别用0,1,2,3,4,5,6,7来表示。

    示例:10=012,第一位补0表示八进制
    十进制 D (decimal)

    逢十进一,基数为10,数值部分分别用0,1,2,3,4,5,6,7,8,9来表示。

    示例:11=11,我们数学运算中最常用的进制
    十六进制 H (hexadecimal)

    逢十六进一,基数为16,数值部分用十进制表示0~9,用子没有A,B,C,D,E,F表示10~15。

    示例:30=0X1E,0X前缀表示十六进制

    小技巧

    Windows系统打开计算器(win+r输入calc),选择程序员

    输入一个数字得出不同进制的计算结果

    位运算符

    Java位运算符分为两类:位逻辑运算和移位运算

    位逻辑运算符(4个):

    1. 按位与(&)
    2. 按位或(|)
    3. 按位取反(~)
    4. 按位异或(^)

    移位运算符(3个):

    1. 左移(<<)
    2. 右移(>>)
    3. 无符号右移(>>>)
    运算符描述
    &两位都为1,结果为1,否则为0
    |两位都为0,结果为0,否则为1
    ~两位一个为0,一个为1,结果为1,否则为0
    ^数字反转,0变成1,1变成0
    <<低位溢出,符号位不变,并用符号位补溢出的高位
    >>符号位不变,低位补0
    >>>低位溢出,高位补0

    原码,补码和反码

    机器数:一个数在计算机的存储形式是二进制数,我们称这些二进制数为机器数,机器数是有符号,在计算机中用机器数的最高位存放符号位,0表示正数,1表示负数。

    原码

    原码表示的数值与机器数一样,即原码就是计算机的二进制数

    +1 = 0000 0001   最高位的0表示正数

    -1  = 1000 0001  最高位的1表示负数

    反码

    反码的表示方式分为以下两种:

    • 正数的补码=原码
    • 负数的补码=最高位符号位不变,其他位取反

    +1的反码 = +1的原码 = 0000 0001

    -1的反码 = 1111 1110

    补码

    补码的表示方式分为以下两种:

    • 正数的补码=原码
    • 负数的补码=负数的反码+1

    +1的补码 = +1的原码 = 0000 0001

    -1的补码 = -1的反码 + 1 = 1111 1110 + 1 = 1111 1111

    总结以下:

    1. 二进制的最高位是符号位,0表示正数,1表示负数
    2. 正数的原码=反码=补码
    3. 负数的反码=原码符号位不变,其他位取反
    4. 负数的补码=负数的反码+1,反之,负数的反码=负数的补码-1
    5. 0的反码和补码都是0
    6. 计算机内存中做运算时都是通过补码进行运算的,得出的结果再转成原码才是我们前台输出的结果

    关于上面的几点,我们通过位逻辑运算符做一些简单例子演示

    求出2 & 3的结果

    1. 求出2的原码:原码 = 0000 0010
    2. 上述规则2可得出,2的补码 = 2的原码 = 0000 0010
    3. 求出3的原码:原码 = 0000 0011
    4. 上述规则2可得出,3的补码 = 3的原码 = 0000 0011
    5. 根据规则6,计算机中做运算都是通过补码来进行运算的,即:
    6. 2 & 3 = 2的补码 & 3的补码 =0000 0010 & 0000 0011 = 0000 0010
    7. 0000 0010是我们计算后的补码结果,根据规则1和2得出原码也是相同的,再将我们的原码转成十进制得出的结果为2

    求出~-2的结果

    1. 求出-2的原码:原码 = 1000 0010
    2. 根据规则3计算出反码,-2的反码 = 1111 1101
    3. 根据规则4计算出补码,-2的补码= -2的反码+1 = 1111 1101 + 0000 0001 = 1111 1110
    4. 根据规则6对计算出的补码进行运算,~1111 1110 = 0000 0001
    5. 0000 0001是我们计算后的补码结果,根据规则1和2得出原码也是相同的,再将我们的原码转成十进制得出的结果为1

    最后给个练习题:计算~2的结果?

  • 相关阅读:
    每日练习------有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数
    VMware使用Window、WinXP等虚拟机上不了网的解决办法(管用)
    软件测试系列——概述,用例设计
    Anemoi hash:一种SNARK-friendly的哈希函数
    笔记本CPU天梯图(2024年8月),含AMD/骁龙等新CPU
    【毕业设计源码】基于微信小程序的查寝系统的设计与实现
    oracle 数据库实验三
    微泡排气除污装置有哪几种叫法吗?
    运用领域模型——DDD
    【机器学习合集】标准化与池化合集 ->(个人学习记录笔记)
  • 原文地址:https://blog.csdn.net/LeechengLove/article/details/125399131