二进制、八进制、十六进制和十进制的相互转换,原码反码补码计算以及Java中数字的存储
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中数字的存储相关推荐
- (转)java 原码反码补码计算 以及 取反运算,原码反码补码运算公式
[README] 转自: https://www.zhangshilong.cn/work/289454.html 1. 原码.反码.补码: (1)在Java中,所有数据的表示方式都是以补码形式来表示 ...
- 原码 反码 补码 计算
概念了解: 对于一个数值,计算机使用一定的编码方式进行存储,原码,反码,补码是机器存储一个具体数字的编码方式. 1,原码 第一位为符号位,其余位表示值,正数符号位取反为负数. 如果是8位二进制: [+ ...
- 原码 反码 补码的相互转换
原码 反码 补码的相互转换 原码 反码 补码的转换 还是比较 简单基础的问题.之前学习java的时候就学过,后来忘记了,忘记了!!!,后来学了位移运算符,左移 右移 无符号右移 之后就由有点儿懵了. ...
- python二进制反码例题_python中的进制转换和原码,反码,补码
python中的进制转换和原码,反码,补码 计算机文件大小单位 b = bit 位(比特) B = Byte 字节 1Byte = 8 bit #一个字节等于8位 可以简写成 1B = 8b 1KB ...
- C语言基础(二)—— 常量与变量、数据类型、进位制、关键字、原码反码补码、限定符、字符串格式化输入输出
1. 常量与变量 1.1 关键字 1.2 数据类型 数据类型的作用:编译器预算对象(变量)分配的内存空间大小. 1.3 常量 在程序运行过程中,其值不能被改变的量 常量一般出现在表达式或赋值语句中 整 ...
- 【原码, 反码, 补码的基础概念和计算方法】
数值在计算机中是以补码的方式存储的,在探求为何计算机要使用补码之前, 让我们先了解原码, 反码和补码的概念. 原码就是符号位加上数字的二进制表示, 即用第一位表示符号, 其余位表示值. 反码的表示方法 ...
- 二进制八进制十进制十六进制及原码反码补码
1.进制的介绍 定义:进位制,人们规定的一种进位方式:表示某一位置上的数,运算时是逢X进一位. 十进制是逢十进一:二进制是逢二进一,八进制是逢八进一: 常见进制:二进制,八进制,十进制,十六进制: 学 ...
- 进制之间的快速转换法:8421码及原码反码补码之间的相互转换关系
进制之间的快速转换法: 十进制和二进制的指尖的快速转换法: 8421码,是BCD码的一种 二进制数据中的每个位上的1,都代表一个固定的数值,将固定的数值相加即可! 二进制: 1 1 1 1 1 1 1 ...
- 【程序员必修数学课】-基础思想篇-二进制-原码反码补码的数学论证
二进制计数法&原码&反码&补码 Ⅰ 前言 Ⅱ 二进制计数法 A. 什么是二进制计数法? B. 为什么要使用二进制? C. 二进制的位运算 D. 符号位 E. 溢出 Ⅲ 原码&a ...
最新文章
- shell之冒号的作用
- sqlrelay mysql_数据库连接池SQL Relay安装使用-Java架构师必看
- 0513JS基础:数组内置方法、数学函数、时间函数
- python软件代码示例-python 示例代码1
- PHP-sftp文件上传
- 不是世界不好,而是你见得太少
- postscript打印机什么意思_涨知识|你不知道的关于打印机的打印过程和打印机驱动的那些事...
- Mac terminal终端或iterm2【 ?~?】~两边出现问号、字体有背景色的问题
- 在Windows 7下安装和配置MonoGame
- 【读书笔记】C#高级编程 第九章 字符串和正则表达式
- win7计算机桌面位置,win7系统更改桌面位置的操作方法
- 德语翻译-德语在线批量翻译软件
- 春日游湖不易,但居家聊聊数据湖还是可以的……
- 迭代回溯的图最大团问题(可得到多组最优解)
- c语言gets,getc,区分C语言中fgetc、getc、getchar、fgets、gets
- 离散随机变量和连续随机变量_随机变量深度崩溃课程
- 现在都在考华为认证,含金量高不高呢?该如何备考?
- matlab中imresize()函数用法
- js+java 实现图片在线预览功能
- Flask-中session的工作机制和session操作