Java中的源码,反码和补码
一、在Java中所有数据都是以补码的形式表示的,原码即数字的二进制表示加符号位,反码即将原码按位取反,补码简单来说即反码加1
二、Java中数据的表示方式
1.正数:正数的原码、补码、反码都相同,正数的符号位为0;
2.负数:负数的符号位为1,其余各位使用补码表示
3.使用补码表示的意义:首先,可以将减法运算转化为加法运算来处理,其次可以用统一的形式表示0,+0和-0的原码是不同的(符号位),而补码唯一。
三、Java中的实数
对于下面这段程序

它的运行结果是这样的

这种误差产生的原因是因为浮点数实际上是用二进制系统表示的。而分数1/10在二进制系统中没有精确的表示,其道理就如同在十进制系统中无法精确表示1/3一样。由于字长有限,浮点数能够精确表示的数是有限的,因而也是离散的。在两个可以精确表示的相邻浮点数之间,必定存在无穷多实数是IEEE 754标准浮点数所无法精确表示的。用32位的单精度浮点数(float)为例,它的符号位占一位(bit),指数部分占8位,尾数部分占23位。现在我们需要存储十进制的0.1这个小数,首先需要把0.1转换成二进制数。然而,我们会发现,十进制的0.1转换成二进制是一个无限循环小数0.0001100110011001100…可是,尾数只有23位,只能截取二进制小数的前23位存储。这时,误差就产生了。当再次把这个浮点数转换成十进制数时,由于损失了一些二进制位,转换回来的十进制数自然也就与原来的不同了。
浮点数的储存方式:通常浮点数将实数分为阶码和尾数来表示,例如10.0111表示为0.100111*2^10.0.10011是尾数,10是阶码。在储存时,如果系统用更多的位来储存尾数,可以增加数值的有效数字位,提高精度,但是表数范围会缩小,如果用更多的位来存储阶码,可以扩大表数范围,但精度会降低。因此,浮点数并非真正意义上的实数,只是在某种范围内的近似。
Java中的源码,反码和补码的更多相关文章
- Java中ArrayList源码分析
一.简介 ArrayList是一个数组队列,相当于动态数组.每个ArrayList实例都有自己的容量,该容量至少和所存储数据的个数一样大小,在每次添加数据时,它会使用ensureCapacity()保 ...
- Java中Thread源码剖析
本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! 关于线程,用很长时间了,主线程下的子线程去做一些事情,就是一个代理模式,主线程分代理权给子线程,子线 ...
- Java中HashMap源码分析
一.HashMap概述 HashMap基于哈希表的Map接口的实现.此实现提供所有可选的映射操作,并允许使用null值和null键.(除了不同步和允许使用null之外,HashMap类与Hashtab ...
- java中jdbc源码解读
在jdbc中一个重要的接口类就是java.sql.Driver,其中有一个重要的方法:Connection connect(String url, java.util.Propeties info); ...
- java中Object源码理解
java阅读笔记 1.object getClass() 返回是的此object运行时的类,返回的对象是被object锁定的对象,调用这个方法不需要进行强转 public static void ma ...
- java中LinkedList源码分析
ArrayList是动态数组,其实本质就是对数组的操作.那么LinkedList实现原理和ArrayList是完全不一样的.现在就来分析一下ArrayList和LinkeList的优劣吧LinkedL ...
- java中AQS源码分析
AQS内部采用CLH队列.CLH队列是由节点组成.内部的Node节点包含的状态有 static final int CANCELLED = 1; static final int SIGNAL ...
- Java中正负数的存储方式-正码 反码和补码
Java中正负数的存储方式-正码 反码和补码 正码 我们以int 为例,一个int占用4个byte,32bits 0 存在内存上为 00000000 00000000 00000000 0000000 ...
- 【java集合框架源码剖析系列】java源码剖析之java集合中的折半插入排序算法
注:关于排序算法,博主写过[数据结构排序算法系列]数据结构八大排序算法,基本上把所有的排序算法都详细的讲解过,而之所以单独将java集合中的排序算法拿出来讲解,是因为在阿里巴巴内推面试的时候面试官问过 ...
- C中进制, 原码, 反码与补码的简单用法
/** * 二进制 binary 如: 1010 * 八进制 octal 如: 070 * 十六进制 hexadecimal 如: 0x7f * * 1Byte = 8bits * 1WORD = 2 ...
随机推荐
- 浏览器DevTools使用技巧
我们是袋鼠云数栈 UED 团队,致力于打造优秀的一站式数据中台产品.我们始终保持工匠精神,探索前端道路,为社区积累并传播经验价值. 本文作者:正则 作为一名前端开发人员,平时开发中使用最多的就是 Ch ...
- 论文翻译:2022_DNS_1th:Multi-scale temporal frequency convolutional network with axial attention for speech enhancement
论文地址:带轴向注意的多尺度时域频率卷积网络语音增强 论文代码:https://github.com/echocatzh/MTFAA-Net 引用:Zhang G, Yu L, Wang C, et ...
- 教你几个 Java 编程中的奇技淫巧
枯燥的编程中总得有些乐趣,今天我们不谈论那些高深的技能,教你几个在编程中的奇技淫巧,说不定在某些时候还能炫耀一番呢. 1.找到最大值和最小值 不使用 if else switch 和三元运算符,在给定 ...
- python解释器下载与基本使用
python介绍与解释器下载基本使用 1.python发展方向 web方向.自动化运维.自动化测试.自动化办公.网络爬虫.金融量化.人工智能.机器学习.数据分析 2.python解释器 历史 ...
- 多表查询两种方法、可视化软件navicat、python操作mysql、pymysql模块
目录 多表查询的思路 多表查询的两种方法 小知识点补充数说明 可视化软件Navicat 安装教程 数据库常用操作 多表查询练习题 python 操作MySQL pymysql补充说明 Non-grou ...
- Spring IOC官方文档学习笔记(二)之Bean概述
1.Bean概述 (1) Spring IoC容器管理一个或多个bean,这些bean是根据我们所提供的配置元数据来创建的,在容器内部,BeanDefinition对象就代表了bean的配置元数据,它 ...
- [编程基础] C++多线程入门9-async教程和示例
原始C++标准仅支持单线程编程.新的C++标准(称为C++11或C++0x)于2011年发布.在C++11中,引入了新的线程库.因此运行本文程序需要C++至少符合C++11标准. 文章目录 9 asy ...
- 如何优雅地升级一个Creator 2.x 项目到 3.6.2 ?
最近,我将之前用 Cocos Creator 2.x 写的一个微信小游戏<球球要回家>移植到了 Cocos Creator 3.6.2 上. 编程语言也从 JavaScript 迁移到了 ...
- Java环境搭载的低级错误
关于Java环境搭载的问题 在按照狂神的教程在Dos窗口执行了javac hello.java后在执行java hello报错"" 发现路径文件夹内并未生成class文件 检查了环 ...
- [C#]关于逆变与协变的基本概念和修饰符in与out的意义
协变与逆变的概念 假如两个类型X和Y具有特殊关系,X类型的每个值都能转换成Y类型.我们将I<X>向I<Y>的转换称为协变转换.反之我们将I<Y>向I<X> ...