zoukankan      html  css  js  c++  java
  • 原码反码和补码

    首先把方法放在前面:

    再来看有趣的实验:

    8位二进制所能表示的范围是多少呢?

    让我们来看下(计算机中都是补码表示,所以下面的数字也都是补码)

    从0000_0000到1111_1111,

    其中0000_0000全零代表数字是零,

    0000_0001到0111_1111因为首位是零,所以代表的是正整数,按普通方法求,+1到+127;

    1000_0000到1111_1111因为首位是一,所以代表的是负整数,将所有位取反末尾加一得到的就是该负数的绝对值(0111_1111~0000_0000,再加1,1000_0000~0000_0001,表示128~1),-128到-1;

    所以8位二进制可以表示的范围是-128~+127;

    ----其中我们重点关注的是1000_0000代表的数字到底是多少,虽然利用方法求出了它是-128,同时我们可以进行验证一下:

    因为1000_0000刚好是8位,占一个字节,而字符类型也是占一个字节,我们可以巧妙的用字符变量来存储,并将其以十进制来输出,从而验证我们的猜想。


    做两个简单的实验吧:

    1.

    因为存储的是二进制的补码,首位是1,所以这个数是负整数,

    将所有位取反,0000_0000...1010

    再末位加一,0000_0000...1011

    这个数是11,

    所以原来的数应该是-11

    2.

     -3转成二进制补码,先求+3的二进制代码011,所有位取反100,末位加一得到101,不够位数左边补1,得到1111_1111_1111_1111_1111_1111_1111_1101,用16进制表示就是0xFFFFFFFD


     我们再来做两个有趣的验证:关于溢出

    第一个:

    为何赋值128,输出却是-128的?

    因为ch变量是字符型变量,在机器内部占一个字节(8位),而128是一个整型变量,占据4个字节,所以内部的补码应该是0000_0000_...1000_0000,

    赋值运算直接将其截断,把1000_0000赋给了ch,而其补码代表的是-128,

    所以输出结果是-128。

     第二个:

     同理129应该是0000_0000...1000_0001

    将其截断赋给ch,

    ch = 1000_0001,

    这个补码表示的是-127

  • 相关阅读:
    01 Jq 基础
    01 属性
    input 编辑框 光标 的相关问题
    登录页面 文字 2 3 4 个字 等宽俩端对齐 空格
    复选框单选框与文字对齐问题的研究与解决
    在Python中对MySQL中的数据进行可视化
    输入2个坐标的数值求出对应坐标间的距离和圆的面积
    numpy中arange函数内起始值必须大于结束值,否则生成为空的一维数组
    条件语句练习-比分预测
    三元表达式是棒棒哒!
  • 原文地址:https://www.cnblogs.com/ajiaoa/p/14015959.html
Copyright © 2011-2022 走看看