Java基础(二):原码、反码、补码及进制之间的运算

有时候,不是因为你没有能力,也不是因为你缺少勇气,只是因为你付出的努力还太少,所以,成功便不会走向你。而你所需要做的,就是坚定你的梦想,你的目标,你的未来,然后以不达目的誓不罢休的那股劲,去付出你的努力,成功就会慢慢向你靠近。

导读:本篇文章讲解 Java基础(二):原码、反码、补码及进制之间的运算,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

Java基础系列文章

Java基础(一):语言概述

Java基础(二):原码、反码、补码及进制之间的运算

Java基础(三):数据类型与进制

Java基础(四):逻辑运算符和位运算符

Java基础(五):流程控制语句

Java基础(六):数组

Java基础(七):面向对象编程

Java基础(八):封装、继承、多态性

Java基础(九):Object 类的使用

Java基础(十):关键字static、代码块、关键字final

Java基础(十一):抽象类、接口、内部类

Java基础(十二):枚举类

Java基础(十三):注解(Annotation)

Java基础(十四):包装类

Java基础(十五):异常处理

Java基础(十六):String的常用API

Java基础(十七):日期时间API

Java基础(十八):java比较器、系统相关类、数学相关类

Java基础(十九):集合框架

Java基础(二十):泛型

Java基础(二十一):集合源码

Java基础(二十二):File类与IO流

Java基础(二十三):反射机制



一、不同进制的表示方式

  • 所有数字在计算机底层都以二进制形式存在
  • 对于整数,有四种表示方式
    • 二进制(binary):0,1 ,满2进1,以0b0B开头
    • 十进制(decimal):0-9 ,满10进1
    • 八进制(octal):0-7 ,满8进1,以数字0开头表示
    • 十六进制(hex):0-9及A-F,满16进1,以0x0X开头表示。此处的A-F不区分大小写。如:0x21AF +1= 0X21B0
十进制 二进制 八进制 十六进制
0 0 0 0
1 1 1 1
2 10 2 2
3 11 3 3
4 100 4 4
5 101 5 5
6 110 6 6
7 111 7 7
8 1000 10 8
9 1001 11 9
10 1010 12 a或A
11 1011 13 b或B
12 1100 14 c或C
13 1101 15 d或D
14 1110 16 e或E
15 1111 17 f或F
16 10000 20 10

二、二进制

  • 计算机数据的存储使用二进制补码形式存储,并且最高位是符号位
    • 正数:最高位是0
    • 负数:最高位是1
  • 规 定
    • 正数的补码与反码、原码一样,称为三码合一
    • 负数的补码与反码、原码不一样:
      • 负数的原码:把十进制转为二进制,然后最高位设置为1
      • 负数的反码:在原码的基础上,最高位不变,其余位取反(0变1,1变0)
      • 负数的补码:反码+1

为什么要使用原码、反码、补码表示形式呢?

  • 主要要解决的问题就是负数的表示
    1. 假设我们有正数0000 1111,我们如何表示其相反数呢?
    2. 一般我们的思路是,找一个数,跟它相加的结果等于0,但是我们发现,要找出一个与它相加后结果等于0的数还是要略加思考一下的(因为要计算进位)
    3. 所以,为何不找出一个与它相加后结果是1111 1111的数,然后该数+1即是我们所要的答案啦
    4. 于是,很容易的,0000 1111 + 1111 0000 + 1 = 1111 1111 1111 1111 + 1 = (1)0000 0000 (超过最高位数的1舍去)
    5. 一目了然,1111 0001 就是我们想要的答案了
    6. 那么我们是怎么得到这个相反数的呢?
      • 首先,找出一个数与它加起来结果是全1的,这个数便是它的反码
      • 然后这个数再加1,这便是它的相反数了,也是我们说的补码
      • 我们检验一下0的情况,0000 + 1111 + 1 =(1)0000,其中1111 + 1 = (1)0000 = 0000,即+0和-0的二进制表示均为0000

三、进制之间的转换

二进制 转 十进制

在这里插入图片描述

十进制 转 二进制

在这里插入图片描述

二进制与八进制转换

在这里插入图片描述

四、byte的取值范围

  • byte 在计算机中是8位;第一位为符号位。0表示正数,1表示为负数,其余的7位表示具体的值
  • 数值在计算机内存中的存储是补码的方式
  • 正数最大为0111 1111,十进制表示形式为127
  • -0的原码是1000 0000,反码是 1111 1111,补码是 10000 0000 ,因为byte只识别8位字节,所以补码是 0000 0000
  • +0的原码是 0000 0000 ,反码补码都是其本身,还是0000 0000
  • 对于0来说,底层存储补码,就只有0000 0000,把-0和+0都包括了
原码 -1 是  1000 0001 ,   -127是 1111 1111

反码    是  1111 1110 ,       是 1000 0000

补码    是  1111 1111 ,       是 1000 0001
    
即补码 1111 1111 到补码 1000 0001 表示 -1 到 -127   
  • 负数的补码还有一个空缺,1000 0000,这个就作为了-128的补码
    • -128 + 1 = -127也就是 1000 0000 + 0000 0001 = 1000 0001,运算起来也合理
  • -128只有补码,没有原码和反码(因为推算回去原码是0000 0000)

-128在byte类型中怎么存储?

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/148573.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!