原码

初识JAVA虚拟机--数字编码

纵然是瞬间 提交于 2020-02-26 17:40:31
一、 整数在Java虚拟机中的标识 java虚拟机中的整数 :byte、short、int、long四种;分别标识8位、16位、32位、64位有符号整数。 整数在计算机中使用补码来表示,java虚拟机中也同理 。 原码 :符号位加上数字的二进制表示 int 10 的原码为:00000000 00000000 00000000 00001010 int -10 的原码为: 10000000 00000000 00000000 00001010 反码 :就是在原码的基础上符号位不变其余取反 int -10的反码为: 11111111 11111111 11111111 11110101 补码 :负数的补码就是反码加1,正整数的补码就是原码本身 int 10 的补码:00000000 00000000 00000000 00001010 int -10的补码:11111111 11111111 11111111 11110110 int a = - 10 ; for ( int i = 0 ; i < 32 ; i ++ ) { int t = ( a & 0x80000000 >>> ) >>> > ( 31 - i ) ; System . out . print ( t ) ; } 以上代码可以打印-10在虚拟机内的时间表示:

位运算

时光总嘲笑我的痴心妄想 提交于 2020-02-21 22:23:12
文章目录 一、进制表示 1、进制 2、进制的表现形式 3、原码、反码和补码 二、位运算 1、&——与运算(and) (1)运算规则 (2)应用 2、|——或运算(or) (1)运算规则 (2)应用 3、^——异或运算 (xor) (1)运算规则 (2)应用 4、~——非运算(not) (1)运算规则 三、移位运算 1、<<——左移运算 2、>>——右移运算 3、>>>——无符号右移运算(没有无符号左移运算) 四、位运算应用 1、判断奇偶数(与运算) 2、交换两个数(异或) 3、求 m 的 n 次方 4、找出不大于 N 的最大的 2 的幂指数 一、进制表示 1、进制 进制是一种记数方式 ,可以用有限的数字符号代表所有的数值。由特定的数值组成。 2、进制的表现形式 二进制: 由 0 和 1 两个数字组成,都是以 0b 开始; 八进制: 由 0~7 数字组成,为了区分于其他进制的数字,都是以 0 开始; 十进制: 都是以 0~9 这九个数字组成,不能以 0 开头; 十六进制:由 0 ~ 9 和 A~ F 组成,为了区分于其他进制的数字,都是以 0x 或 0X 开始。 3、原码、反码和补码 原码——即为计算机中对数值的二进制表示 。如,十进制的 5 用二进制表示为 0000 0101 ;(最高位为符号位,1 表示负,0 表示正,并且在原、反、补的转换中,符号位不变) 反码 ——即取反

原码,反码,补码,移位

ε祈祈猫儿з 提交于 2020-02-17 07:09:34
https://www.cnblogs.com/btgyoyo/p/6371398.html 复习下二进制的有关知识 1.所有的数据都是以二进制的形式存储在硬盘上。对于一个字节的8位到底是什么类型 计算机是如何分辨的呢? 其实计算机并不负责判断数据类型,数据类型是程序告诉计算机该如何解释内存块. 2.对于字符的存储,先将字符转化成其字符集的码点,(码点就是一个数字),然后把该数字转成2进制存储。所以我们只要记得数字的存储就ok了。字符的码点程序采用无符号处理,即没有符号位,数值型默认都是有符号位的。 1个字节的最高位是符号位所以一个数字能够存储的范围是-128-127 3.原码 正数5: 0000 0101 负数5: 1000 0101 4.反码 正数5: 0000 0101 负数5: 1111 1010 5.补码 正数5: 0000 0101 负数5: 1111 1011(-5在硬盘上的存储方式) 1.可以看到正数的原码 与 其反码补码相同 2.负数的原码最高位为13.负数的反码: 符号位不变,其余各位按位取反4.负数的补码:在其反码的基础上+15.负数是以其补码的方式存储在硬盘上的 6.左移操作(<<) 规则: 右边空出的位用0填补 高位左移溢出则舍弃该高位。 计算机中常用补码表示数据: 数据 127,补码和原码一样:0111 1111。 左移一位: 1111 1110 ->

负数为什么要用补码来表示?

▼魔方 西西 提交于 2020-02-16 00:13:32
负数为什么要用补码来表示? 今天,发生一件非常有趣的事情。 公司同事问了我一个问题:为什么 2.0 - 1.1 = 0.89999999 呢?不应该是 0.9吗? 原来是,他问了周围一圈的同事,都给他的是同一个回答,说这是精度问题。他百思不得其解,怎么就会产生精度问题呢。再问,就没人知道原因了。 然后,我就看到了他抱着一本厚厚的书在看。拿过来一看,是一本Java书,厚厚的六百多页,这还仅是第一卷。哟呵,这是准备大干一场啊。 看在他这么努力学习的份上,还有他那对知识极度渴望的眼神。我决定,把我毕生所学传授与他。 于是,就给他详细讲解了,计算机中是怎么存储一个数的,十进制是怎么在转二进制的过程中丢失精度的,以及浮点数是怎么遵循IEEE 754 规范的,在浮点数进行加减运算的过程中会经历对阶、移位运算等过程,以及在此过程中是怎么丢失精度的。(这些问题在之前的文章中都有解答,参看“为什么0.1+0.2=0.30000000000000004”) 然后,成功的把他彻底搞懵逼了。怎么这么难啊。 原来,他的计算机基础比我还匮乏,不知道什么是位运算,不知道什么是原码、反码和补码。 本着我的热心肠,我就给他普及了一下这些知识 ---- 负数的补码形式和位移运算。 我们知道,一个数分为有符号和无符号。对于,有符号的数来说,最高位代表符号位,即最高位1代表负数,0代表正数。 在计算机中,存储一个数的时候

原码,反码,补码

◇◆丶佛笑我妖孽 提交于 2020-02-14 19:16:07
原码,反码,补码 计算机里面只有加法,那减法怎么表示了,用加法来表示例如;5-3在计算机的表示为5 + (-3) 为什么要有源码,反码,补码这些东西,有源码就够了不是吗、 因为计算机最终的计算就是拿补码来计算的,从源码转为反码最后在转为补码才能计算出正确的结果 源码不方便计算,原因是第一位作为符号位了 比如 -4,就是 [10000100] 。因为第一位是符号位,所以机器数的形式值就不等于真正的数值。例如上面的有符号数 [10000100],其最高位1代表负,其真正数值是 -4 而不是形式值132([10000100]转换成十进制等于132) -4加了符号位直接计算的话就是132了这肯定是不对的,那怎么办呢这个时候想到了反码先把源码除了符号位之外其余取反就是反码作为中间步骤 然后符号位保持不变在反码的基础上加1就是补码,这个时候才能计算 正数 的源码,反码,补码都是一样的,第一位的符号位为0 负数的反码符号位第一位保持不变还是1,其余取反 负数的补码符号位第一位保持不变还是 1,然后在反码的基础上加1 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Jason_M_Ho/article/details/78700434   数值在计算机中是以补码的方式存储的,在探求为何计算机要使用补码之前, 让我们先了解原码, 反码和补码的概念。

原码、反码、补码的正(nao)确(can)打开方式

僤鯓⒐⒋嵵緔 提交于 2020-02-14 03:47:03
  我们知道日常生活中使用的数分为整数和实数,整数的小数点固定在数的最右边,可以省略不写,而实数的小数点则不固定。在计算机中只能识别和表示“0”和“1”,而无法识别小数点,因此要想使得计算机能够处理日常使用的数据,小数点的问题是不可避免的。   关于计算机系统中实数的表示,在下篇文章中会讲解。本篇博客我们讲解的是整数在计算机系统中如何表示。     在各种大学教材,各种网站论坛中,对于整数编码表示方法的正确打开姿势(姿势要帅)如下:    1、机器数   机器数(computer number)是数字在计算机中的二进制表示形式。机器数有2个特点:   ①、符号数字化。因为计算机硬件只认识两种物理状态(用0和1表示),因此数据的正负号在机器里就用一位二进制0或者1来区分。在计算机用一个数的最高位存放符号, 0代表符号“+”,以1代表符号“-”。   ②、机器数的大小受机器字长的限制。机器内部设备一次能表示的二进制位数叫机器的字长,一台机器的字长是固定的。字长8位叫一个字节(Byte),机器字长一般都是字节的整数倍,如字长8位、16位、32位、64位。   比如在字长为8的计算机中,十进制数+5,其机器数为00000101;十进制数-5,其机器数为10000101。 2、真值   计算机机器数真正的值称为真值。因为机器数的最高位是符号位,所以我们在计算真值的时候要分区分开。  

原码、补码、反码

我只是一个虾纸丫 提交于 2020-02-13 10:51:25
本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 一. 机器数和真值 在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念. 1、机器数 一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1. 比如,十进制中的数 +3 ,计算机字长为8位,转换成二进制就是00000011。如果是 -3 ,就是 10000011 。 那么,这里的 00000011 和 10000011 就是机器数。 2、真值 因为第一位是符号位,所以机器数的形式值就不等于真正的数值。例如上面的有符号数 10000011,其最高位1代表负,其真正数值是 -3 而不是形式值131(10000011转换成十进制等于131)。所以,为区别起见,将带符号位的机器数对应的真正数值称为机器数的真值。 例:0000 0001的真值 = +000 0001 = +1,1000 0001的真值 = –000 0001 = –1 二. 原码, 反码, 补码的基础概念和计算方法. 在探求为何机器要使用补码之前, 让我们先了解原码, 反码和补码的概念.对于一个数, 计算机要使用一定的编码方式进行存储. 原码, 反码, 补码是机器存储一个具体数字的编码方式

原码, 反码, 补码 详解

倾然丶 夕夏残阳落幕 提交于 2020-02-13 09:42:31
转自 原码, 反码, 补码 详解 一. 机器数和真值 在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念. 1、机器数 一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1. 比如,十进制中的数 +3 ,计算机字长为8位,转换成二进制就是00000011。如果是 -3 ,就是 10000011 。 那么,这里的 00000011 和 10000011 就是机器数。 2、真值 因为第一位是符号位,所以机器数的形式值就不等于真正的数值。例如上面的有符号数 10000011,其最高位1代表负,其真正数值是 -3 而不是形式值131(10000011转换成十进制等于131)。所以,为区别起见,将带符号位的机器数对应的真正数值称为机器数的真值。 例:0000 0001的真值 = +000 0001 = +1,1000 0001的真值 = –000 0001 = –1 二. 原码, 反码, 补码的基础概念和计算方法. 在探求为何机器要使用补码之前, 让我们先了解原码, 反码和补码的概念.对于一个数, 计算机要使用一定的编码方式进行存储. 原码, 反码, 补码是机器存储一个具体数字的编码方式. 1. 原码 原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值. 比如如果是8位二进制: [+1]

【Java基础】15、负数的二进制表示方法

风格不统一 提交于 2020-02-13 09:42:00
在计算机中,负数以其正值的补码形式表达 。 什么叫补码呢?这得从原码,反码说起。   原码:一个整数,按照绝对值大小转换成的二进制数,称为原码。 比如 00000000 00000000 00000000 00000101 是 5的 原码。   反码:将二进制数按位取反,所得的新二进制数称为原二进制数的反码。 取反操作指:原为1,得0;原为0,得1。(1变0; 0变1) 比如:将00000000 00000000 00000000 00000101每一位取反,得11111111 11111111 11111111 11111010。 称:11111111 11111111 11111111 11111010 是 00000000 00000000 00000000 00000101 的反码。 反码是相互的,所以也可称: 11111111 11111111 11111111 11111010 和 00000000 00000000 00000000 00000101 互为反码。   补码:反码加1称为补码。 也就是说,要得到一个数的补码,先得到反码,然后将反码加上1,所得数称为补码。 比如:00000000 00000000 00000000 00000101 的反码是:11111111 11111111 11111111 11111010。 那么,补码为: 11111111

负数的二进制表示方法(正数:原码、负数:补码)

筅森魡賤 提交于 2020-02-13 09:41:39
原文连接:http://blog.csdn.net/diandianxiyu_geek/article/details/44098121 一:表示法: 1、正数5的表示法 假设有一个 int 类型的数,值为5,那么,我们知道它在计算机中表示为: 00000000 00000000 00000000 00000101 5转换成二制是101,不过int类型的数占用4字节(32位),所以前面填了一堆0。 2、负数-5的表示法 现在想知道,-5在计算机中如何表示?在计算机中,负数以原码的补码形式表达。 二、概念: 1、原码: 一个正数,按照绝对值大小转换成的二进制数;一个负数按照绝对值大小转换成的二进制数,然后最高位补1,称为原码。 比如 00000000 00000000 00000000 00000101 是 5的 原码。 10000000 00000000 00000000 00000101 是 -5的 原码。 备注: 比如byte类型,用2^8来表示无符号整数的话,是0 - 255了;如果有符号, 最高位表示符号,0为正,1为负,那么,正常的理解就是 -127 至 +127 了.这就是原码了,值得一提的是,原码的弱点,有2个0,即+0和-0(10000000和00000000);还有就是,进行异号相加或同号相减时,比较笨蛋,先要判断2个数的绝对值大小,然后进行加减操作