您现在的位置是:首页 > 编程 > 

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

2025-07-21 02:34:18
Java基础(二):原码、反码、补码及进制之间的运算 Java基础系列文章Java基础(一):语言概述Java基础(二):原码、反码、补码及进制之间的运算Java基础(三):数据类型与进制Java基础(四):逻辑运算符和位运算符Java基础(五):流程控制语句Java基础(六):数组Java基础(七):面向对象编程Java基础(八):封装、继承、多态性Java基础(九):Object 类的使用Ja

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

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基础(二十三):反射机制

Java基础(二十四):网络编程

Java基础(二十五):Lambda表达式、方法引用、构造器引用

Java基础(二十六):Java8 Stream流及Optional类

一、不同进制的表示方式
  • 所有数字在计算机底层都以二进制形式存在
  • 对于整数,有四种表示方式
    • 二进制(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

11

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

1

b或B

12

1100

14

c或C

1

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都包括了
代码语言:javascript代码运行次数: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类型中怎么存储?

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2024-02-24,如有侵权请联系 cloudcommunity@tencent 删除二进制基础计算机java存储

#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/biancheng/1162055.html

相关标签:无
上传时间: 2025-07-20 18:33:02
留言与评论(共有 8 条评论)
本站网友 连城二手房
7分钟前 发表
1变0)负数的补码:反码+1 为什么要使用原码
本站网友 百度网站电话
28分钟前 发表
补码及进制之间的运算Java基础(三):数据类型与进制Java基础(四):逻辑运算符和位运算符Java基础(五):流程控制语句Java基础(六):数组Java基础(七):面向对象编程Java基础(八):封装
本站网友 南京浦口租房
23分钟前 发表
以0b或0B开头十进制(decimal):0-9
本站网友 风雨唐人街
21分钟前 发表
继承
本站网友 万好万家集团有限公司
9分钟前 发表
底层存储补码
本站网友 中国职业教育信息资源网
8分钟前 发表
原始发表:2024-02-24
本站网友 秦皇岛美食
12分钟前 发表
1变0)负数的补码:反码+1 为什么要使用原码