• 动手动脑1 9.30


    阅读相应教材,或者使用互联网搜索引擎,弄清楚反码、补码跟原码这几个概念,然后编写示例程序,对正数、负数进行各种位操作,观察输出结果,与手工计算的结果进行比对,看看Java中的数是采用上述哪种码表示的。

    原码:用两个字节(byte,1字节=8位(bite)),16位表示的二进制整数。
    如0的原码:0(或1)000 0000 0000 0000
    正整数的原码(如1):0000 0000 0000 0001
    负整数的原码(如-1):1000 0000 0000 0001
    正整数的原码,最高位是0,负整数的原码最高位是1(计算机中最高位0表示正,1表示-),除最高位外其余各位表示这个整数的绝对值即可;
    2.2反码:正整数的反码=原码
    负整数的最高位不变还是1,其它位取反(0变1,1变0)就得到负整数的反码了,如-1的反码就是:
    1111 1111 1111 1110
    2.3补码,补码是cpu内部用来计算数据的:
    正整数的补码=原码=反码;
    将负整数的原码取它的反码,将它的补码加一就得到负整数的补码了。
    如数-1:1000 0000 0000 0001
    先取反码得:1111 1111 1111 1110
    将反码加1就得到补码:1111 1111 1111 1111

    注:计算机内部存储的数都是二进制数的补码形式

    负数的位运算:

    原负数值->原码->反码->补码->移位=移位后的原码->反码->补码->移位后的数值

     //负数的移位运算         

    //-15 = whyA = 1111 1111 1111 1111 1111 1111 1111 0001

    //-15<<2 = whyB = 1111 1111 1111 1111 1111 1111 1100 0100 = -60
    //-15>>2 = whyC = 1111 1111 1111 1111 1111 1111 1111 1100 = -4

    //--------------------------------------------- //
    //whyA的获得
    //a、-15 原码 [1000 0000 ... 0000 1111]:最高位是符号位不动,其他和+15一样
    //b、-15 反码 [1111 1111 ... 1111 0000]

    //c、-15 补码 [1111 1111 ... 1111 0001] = whyA :补码的话如果是1需要进位的,后面也有

    //---------------------------------------------

    //whyB的获得 //d、-15 左移2位 原码 [1111 1111 ... 1100 0100]:以此为原码

    //e、-15 左移2位 反码 [1000 0000 ... 0011 1011]

    //f、-15 左移2位 补码 [1000 0000 ... 0011 1100] = -60 = whyB

    //---------------------------------------------

    //whyC的获得

    //d、-15 右移2位 原码 [1111 1111 ... 1111 1100]:以此为原码

    //e、-15 右移2位 反码 [1000 0000 ... 0000 0011]
    //f、-15 右移2位 补码 [1000 0000 ... 0000 0100] = -4 = whyC

    作者:霓裳_慕月
    链接:http://www.imooc.com/article/11073
    来源:慕课网

    转载于:https://www.cnblogs.com/daisy99lijing/p/9751619.html

  • 相关阅读:
    树的计数 + prufer序列与Cayley公式 学习笔记
    链表
    密码学摘要
    查找与排序
    匿名内部类 调用方法内局部变量
    <c:url>标签相关知识点
    Oracle 导入导出数据库
    oracle cursor
    Oracle 删除用户和表空间------创建表空间和用户
    iOS延迟执行方法
  • 原文地址:https://www.cnblogs.com/dty602511/p/14159679.html
Copyright © 2020-2023  润新知