1. Java中数字默认是十进制,二进制、八进制以及十六进制的表示如下

2. 二进制、八进制、十六进制和十进制的相互转换

2.1 为了不累赘描述,本文以百度的二进制小数转换为十进制小数为例,如下图

2.2 十进制整数转二进制整数以及十进制小数转换为二进制小数如下

     

3. 原码、反码和补码

在理解二进制和十进制转换后,对于一个整数,比如 7 ,我们知道二进制表示是 0111,但是一个负数的二进制怎么表示呢,你有想过 -8 怎么用二进制表示吗?在计算机中,存储的都是补码,但是我们前面说的二进制和十进制相互转换都是原码形式。

3.1 对于正数来说,它的原码、反码和补码是一样的。

14,原码:0000 1110,反码:0000 1110,补码:0000 1110
34,原码:0010 0010,反码:0010 0010,补码:0010 0010

对于负数来说,计算机规定第一位是0表示正数,1表示负数,那么 -14 的原码就是 1000 1110,-34的原码是 1010 0010.那么负数的原码和反码、补码有什么关系呢?

3.2 负数的反码是负数的原码除符号位全部取反;负数补码是负数反码+1

-14,原码:1000 1110,反码:1111 0001,补码:1111 0010
-34,原码:1010 0010,反码:1101 1101,补码:1101 1110

有没有感觉这样会有点不对劲,0 和 -0 以及边界,这里以8位示例,对于原码来说,1111 1111表示负数,正数最大只能0111 1111,此时是+127;负数最小是1111 1111,此时是-127。我们学过一个字节有符号正数它的表示范围是-128~127,那么-128怎么表示?

3.3  感觉不对劲的 -0 和 -128 怎么表示

   0,原码:0000 0000,反码:0000 0000,补码:0000 0000-0,原码:1000 0000,反码:1111 1111,补码:0000 0000-128,原码:无         反码:无         补码:1000 0000

因此,计算机通过存储补码,一个字节可以存储 -128~127的范围,没有 0 和 -0 的区别,存储的都是0000 0000. 同时因为没有数的补码是 1000 0000,那么就直接将 1000 0000表示为 -128,以下通过Java的二进制表示及输出来说明。

注意:以上8位二进制表示前需要加上(byte)类型,如果不加的话,默认是int类型,那么程序在存储时会自动在二进制前面补上24个0,那么以下所有的数字都变为正数。只有加上byte强制转换,那么程序才会在存储时以真实的8位二进制存储,

        System.out.println((byte)0b00000000);System.out.println();System.out.println((byte)0b00000001);System.out.println();System.out.println((byte)0b00000010);System.out.println();System.out.println((byte)0b01111110);System.out.println();System.out.println((byte)0b01111111);System.out.println();System.out.println((byte)0b10000000);System.out.println();System.out.println((byte)0b10000001);System.out.println();System.out.println((byte)0b10000010);System.out.println();System.out.println((byte)0b11111110);System.out.println();System.out.println((byte)0b11111111);

二进制、八进制、十六进制和十进制的相互转换,原码反码补码计算以及Java中数字的存储相关推荐

  1. (转)java 原码反码补码计算 以及 取反运算,原码反码补码运算公式

    [README] 转自: https://www.zhangshilong.cn/work/289454.html 1. 原码.反码.补码: (1)在Java中,所有数据的表示方式都是以补码形式来表示 ...

  2. 原码 反码 补码 计算

    概念了解: 对于一个数值,计算机使用一定的编码方式进行存储,原码,反码,补码是机器存储一个具体数字的编码方式. 1,原码 第一位为符号位,其余位表示值,正数符号位取反为负数. 如果是8位二进制: [+ ...

  3. 原码 反码 补码的相互转换

    原码 反码 补码的相互转换 原码 反码 补码的转换 还是比较 简单基础的问题.之前学习java的时候就学过,后来忘记了,忘记了!!!,后来学了位移运算符,左移 右移 无符号右移 之后就由有点儿懵了. ...

  4. python二进制反码例题_python中的进制转换和原码,反码,补码

    python中的进制转换和原码,反码,补码 计算机文件大小单位 b = bit 位(比特) B = Byte 字节 1Byte = 8 bit #一个字节等于8位 可以简写成 1B = 8b 1KB ...

  5. C语言基础(二)—— 常量与变量、数据类型、进位制、关键字、原码反码补码、限定符、字符串格式化输入输出

    1. 常量与变量 1.1 关键字 1.2 数据类型 数据类型的作用:编译器预算对象(变量)分配的内存空间大小. 1.3 常量 在程序运行过程中,其值不能被改变的量 常量一般出现在表达式或赋值语句中 整 ...

  6. 【原码, 反码, 补码的基础概念和计算方法】

    数值在计算机中是以补码的方式存储的,在探求为何计算机要使用补码之前, 让我们先了解原码, 反码和补码的概念. 原码就是符号位加上数字的二进制表示, 即用第一位表示符号, 其余位表示值. 反码的表示方法 ...

  7. 二进制八进制十进制十六进制及原码反码补码

    1.进制的介绍 定义:进位制,人们规定的一种进位方式:表示某一位置上的数,运算时是逢X进一位. 十进制是逢十进一:二进制是逢二进一,八进制是逢八进一: 常见进制:二进制,八进制,十进制,十六进制: 学 ...

  8. 进制之间的快速转换法:8421码及原码反码补码之间的相互转换关系

    进制之间的快速转换法: 十进制和二进制的指尖的快速转换法: 8421码,是BCD码的一种 二进制数据中的每个位上的1,都代表一个固定的数值,将固定的数值相加即可! 二进制: 1 1 1 1 1 1 1 ...

  9. 【程序员必修数学课】-基础思想篇-二进制-原码反码补码的数学论证

    二进制计数法&原码&反码&补码 Ⅰ 前言 Ⅱ 二进制计数法 A. 什么是二进制计数法? B. 为什么要使用二进制? C. 二进制的位运算 D. 符号位 E. 溢出 Ⅲ 原码&a ...

最新文章

  1. shell之冒号的作用
  2. sqlrelay mysql_数据库连接池SQL Relay安装使用-Java架构师必看
  3. 0513JS基础:数组内置方法、数学函数、时间函数
  4. python软件代码示例-python 示例代码1
  5. PHP-sftp文件上传
  6. 不是世界不好,而是你见得太少
  7. postscript打印机什么意思_涨知识|你不知道的关于打印机的打印过程和打印机驱动的那些事...
  8. Mac terminal终端或iterm2【 ?~?】~两边出现问号、字体有背景色的问题
  9. 在Windows 7下安装和配置MonoGame
  10. 【读书笔记】C#高级编程 第九章 字符串和正则表达式
  11. win7计算机桌面位置,win7系统更改桌面位置的操作方法
  12. 德语翻译-德语在线批量翻译软件
  13. 春日游湖不易,但居家聊聊数据湖还是可以的……
  14. 迭代回溯的图最大团问题(可得到多组最优解)
  15. c语言gets,getc,区分C语言中fgetc、getc、getchar、fgets、gets
  16. 离散随机变量和连续随机变量_随机变量深度崩溃课程
  17. 现在都在考华为认证,含金量高不高呢?该如何备考?
  18. matlab中imresize()函数用法
  19. js+java 实现图片在线预览功能
  20. Flask-中session的工作机制和session操作

热门文章

  1. ABAP实例:如何设计和使用自定义的权限对象
  2. sap信贷管理的操作流程
  3. SAP潜入移动安全阵地 后ERP发展方向
  4. SAP Credit Memo Debit Memo
  5. SAP MM 移动类型-入门篇
  6. 三种会计科目表:运营会计科目表、国家会计科目表、集团会计科目表
  7. ECC6.0中数据导出到本地时报错GETWA_NOT_ASSIGNED
  8. SAP中smartforms参数
  9. 角逐同城货运,快狗打车抢跑上市
  10. 编写一个函数实现从 1 到 n 共 n 个数的累加_leetcode306_go_累加数