java用的原码还是反码_java 原码 反码 和补码
--------- 原码、补码、反码
计算机是数字电路设备,由复杂的电子元器件组合而成,一个电子元器件在工作时,可以分为两种状态--高电平和低电平,表示数据用高电平表示1,低电平表示0,而多个电子元器件组合在一起时就可以表示更多的状态,即更多的数据,如:000表示0,001表示1,010表示2等等,这也就是我们所说的2进制数据表示法。我们把一个电子元器件表示的数字称为1位(bit),计算机一般将8个电子元器件组合成一个单元,称为一个字节(byte),即这个单元可以表示2^8=256个数字,取值范围0~255.
一个字节有8位,每一位都只可以表示两个数字0、1,我们把最左边的一位称为最高位,最右边的一位称为最低位。为便于描述,这里采用1个字节表示一个整数。
原码:
把最高位作为符号位,0表示正数,1表示负数。其余各位代表数值本身的绝对值,例如:
1表示为0000 0001,-1表示为1000 0001
7 表示 0000 0111 -7 原码表示为: 1000 0111
但是计算机并没有采用原码的计数方式表示数据,为什么呢? 问题出在这:+0表示为0000 0000,-0表示为1000 0000.
这样一来+0似乎不等于-0了。
反码:
反码的表示分为两种情况:
如果一个数为正数,则反码和原码相同. 同时 补码也和他们相同.
如果一个数为负数,则符号位不变,其余各位按原码取反。
例如: 1的原码为0000 0001,反码为0000 0001.
-1的原码为1000 0001,反码为1111 1110.
同样的问题存在于反码:+0的反码为0000 0000 -0的反码为1111 1111。正因为如此,人们寻找出了一种真正能使计算机表示数据无歧义的数据表示方法:补码。
补码:
模的概念:模是计量系统的计量取值范围。例如:时钟就可以看成是个计量器,它的取值范围是0~11,即模(mod)=12,
计算机也可以看成计量器。
“模”的实质是计量器“溢出”的量,是计量器不能表示的数值。任何有模的计量器都能化减法为加法运算,例如:在以10为模的系统中,8和2相对于模来说互为“补数”,实际上1和9,3和7等都有这个共同点,他们加起来等于10(模),他们都互为补数,那么,6-2 =4,2和8互为“补数”,6+8 = 14,去掉一个“模”:10,即14-10 =4;
在计算机中 数字用补码表示, 主要是为了0 的交叉问题:
+0 的原码:0000 0000
+0 的反码 0000 0000
+0 的补码: 0000 0000
-0 的补码: 0000 0000 导致结果一样 .因此 用补码表示 计算中的数字.
为什么要设立补码呢?
第一是为了能让计算机执行减法:
[a-b]补=a补+(-b)补
第二个原因是为了统一正0和负0
正零:00000000
负零:10000000
这两个数其实都是0,但他们的原码却有不同的表示。
但是他们的补码是一样的,都是00000000
特别注意,如果+1之后有进位的,要一直往前进位,包括符号位!(这和反码是不同的!)
[10000000]补
=[10000000]反+1
=11111111+1
=(1)00000000
=00000000(最高位溢出了,符号位变成了0)
同样,在计算机里面,n位计算机,设n=8,则他所能表示的数据取值范围是1111 1111,若再将该数值加1,等于1 0000 0000
有9位,由于计算机只有8位,所以最高位自然丢失,又变成0000 0000,所以,n位计算机的模就是2^n,这样,计算机就可以把减数用它相应的补数代替了。把补数用到计算机数的处理上,就叫补码。
补码表示:
如果一个数为正,那么补码、反码原码都相同,如果一个数为负,那么他的补码就是他的反码加1。
,-42就是通过将42的二进制代码的各个位取反,即对00101010 取反得到11010101 ,然后再加1,得到11010110 ,即-42 。
-42
1. 先得到它的绝对值转换成的二进制: 0010 1010 或者是得到-42 原码:1010 1010
2. 然后对这个值取反 1101 0101 或着是 原码取反码: 负数取反的步骤是;最高位不变,其他位取反 1101 0101
3 在这个再加1 1101 0110 (1+1 =10)
其实第1 种做法是错误的, 因为 补码:反码+1 . 应该先求得 -42 的原码 : 然后求反: 然后+1 ,而不应该是绝对值取反 因为正数的原码 和反码,补码都相同.
对正数取反 得到的结果就不是反码了. 只是单纯的取反.
负数的原码怎么求: 先得到正数的二进数,然后把最高位变为1.
负数的反码怎么求: 在原码的基础上,最高位不变, 其他各位取反.
未完。。。。继续写
java用的原码还是反码_java 原码 反码 和补码相关推荐
- java字节码常量池_java字节码常量池处理说明
1. 根据java的字节码格式说明,常量池中每一项的大小不一样的.运行时,若要通过数组索引获取具体的一项时, 必须要经过一定的处理才能根据数组下标进行处理,具体的实现原理实际上就是空间换时间,可以参考 ...
- java中用于运行字节码的命令_Java字节码指令
1. 简介 Java虚拟机的指令由一个字节长度的.代表着某种特定操作含义的数字(称为操作码)以及跟随其后的零至多个代表此操作所需参数(称为操作数)而构成. 由于Java虚拟机采用面向操作数栈而不是寄存 ...
- java反码补码原码作用_java原码补码反码关系解析
本文为大家解析了java原码补码反码的关系,供大家参考,具体内容如下 原码:不管源数据是十进制还是十六进制,统统将数字转成二进制形式 反码:把原码的二进制统统反过来,0变成1,1变成0 补码:负数的反 ...
- java反码_Java:二进制(原码、反码、补码)与位运算
一.二进制(原码.反码.补码) 二进制的最高位是符号位("0"代表正数,"1"代表负数): Java中没有无符号数: 计算机以整数的补码进行运算: 1. 原码 ...
- java 计算反码_java基础知识-原码、反码、补码、运算符
一.原码.反码.补码 原码 一个数转化成二进制. 用最高位来表示正负,最高位为0表示正数,最高位为1表示负数. 例如: short i=5: 因为在java里short占2个字节转化成二进制就是 00 ...
- 用java程序编写原码补码转换_java 原码、反码、补码
为什么要用? 计算机内部采用二进制表示数值.如十进制数10用二进制数表示为1010.设计算机字长为8,即1Byte.最高位表示符号,0为正,1为负 来看看用原码表示的数在进行加减乘除运算是会有什么问题 ...
- 反码、原码、补码的观点阐述
我自己是不认可所谓的原码.反码的说法,但是很多人在计算负数的二进制时,都会使用反码和原码的概念,我这里就简单梳理下吧. 十进制2的二进制数(按8位的二进制举例)如下: 原码:0000 0010 补码: ...
- 计算机中的原码,计算机中的原码反码补码移码
计算机中的原码反码补码移码 原码 数值 X 的原码记为 [X]原,如果机器字长为 n (即采用 n 个二进制位表示数据),则最高位是符号位,0 表示正号,1 表示负号,基余的 n~1 位表示数值的绝对 ...
- Java实战项目之个人日记本系统【源码+课后指导】_Java毕业设计/计算机毕业设计
供大家练习学习用的Java实战项目来咯--[个人日记本系统]!Java实战项目之个人日记本系统[源码+课后指导]_Java毕业设计/计算机毕业设计https://www.bilibili.com/vi ...
最新文章
- 电大工商管理计算机考试,东方电大工商管理专科计算机期末复习EXCEL五题.docx...
- PHP serialize JSON 解析
- 设计模式学习笔记-基础知识篇
- mysql常用系统函数归类
- linux之openssh配置
- python.集合转列表_python 列表,元组,字典,集合,字符串相互转换
- nodejs的req取参req.body,req.params,req.query
- 【编辑器】VSCode+TEXLIVE环境配置,以SJTUthesis为测试用例
- jQuery UI dialog实现dialog弹框显示
- Linux - Kafka集群搭建
- 英文论文的proposal怎么写?
- 各大型网站架构分析收集
- 后台注册环信IM账号
- 李元翼 梧里 徒死無益
- SAP 荣获「中国好公司」头衔
- Android Studio 生成APK签名证书
- 长时间 正在加载个人设置 开机很慢
- Enzo丨Enzo 抗原回收试剂,pH 6方案
- Java Fork/Join与协程
- js中trim函数_30天中的30个Excel函数:03 – TRIM
热门文章
- JS的indexOf
- 计算机硬件部分可称为裸机,上财信管PPT第3章 计算机硬件与软件基础.ppt
- java beans_java beans的概念及应用?
- 曲线绕x轴旋转曲面方程_空间曲线绕空间直线旋转生成的旋转曲面方程
- TP5的目录常量和路径
- CRMEB删除公众号首页logo动画
- java 里如何实现逻辑返回值_☆技术问答集锦(五)
- c/c++格式化字符串的标识
- latex textbf没有用_LaTeX排版软件札记 Win10 LyX+TeXLive
- 【excel】vlookup