<java基础知识复习>原码、反码、补码 二进制表示数字

<java基础知识复习>原码、反码、补码 二进制表示数字bit(位):数据存储的最小单元。二进制在计算机技术中广泛应用。二进制数用0和1两个数字及其组合来表示任何数 二进制的进位规则是:“逢2进1”。数字1在不同的位上代表不同的值, 按从右至左的次序,这个值以2倍递增。并且规定将它放在有效数字的前面,即组成了有符号数。所以,在二进制中…

前言:

bit(位):数据存储的最小单元。在计算机二进制系统中,位,简记为b,也称为比特(bit),每个二进制数字0或1就是一个位(bit),其中每 8bit = 1 byte(字节);

Java 中的int数据类型占4个byte(字节),而1 byte(字节) = 8 bit(位);(说白了,在二进制系统中是以bit 作为数据存储单元的)

二进制

二进制在计算机技术中广泛应用。二进制数用0和1两个数字及其组合来表示任何数
二进制的进位规则是:“逢2进1”。数字1在不同的位上代表不同的值,
按从右至左的次序,这个值以2倍递增。

无符号数和有符号数

在计算器中参与运算的数有两大类:无符号数和有符号数

(1)有符号数:

对于有符号数而言,符号的正、负机器是无法识别的,但由于“正、负”恰好是两种截然不同的状态,如果用“0”表示“正”,用“1”表示“符”,这样符号也被数字化了,

并且规定将它放在有效数字的前面,即组成了有符号数。所以,在二进制中使用最高位(第一位)来表示符号,最高位是0,表示正数;最高位是1,表示负数。

(2)无符号数:

无符号数是针对二进制来讲的,无符号数的表数范围是非负数。全部二进制均代表数值(所有位都用于表示数的大小),没有符号位。即第一个”0″或”1″不表示正负。

例子:
(1)在Java中int数据类型是怎么在计算机中表示的呢?

 在二进制系统中是以bit(位)来作为数据存储单元的(详细内容请看前言), 假设 int number = 1 ,那么number在计算机系统中将表示如下: 
 00000000 00000000 00000000 00000001 
 同理可得,number=-1 时,在二进制中表示如下: 
 10000000 00000000 00000000 00000001 
 注意:最高位(第一位)是符号位,因为是number值为1是一个正数,所以最高位为0; 


(2)二进制转十进制?

 要从右到左用二进制的每个数去乘以2的相应次方(次方要从0开始算起); 
 假如:二进制数1101转化成十进制 ,那么 1101 = 1*20+0*21+1*22+1*23 = 1+0+4+8 = 13; 
 注意:任何数的0次方都是1。 

二进制中的原码、反码、补码

  对于有符号数而言:

  (1)二进制的最高位是符号位:0表示正数,1表示负数

  (2)正数的原码、反码、补码都一样;

  (3)负数的反码 =  它的原码符号位不变,其他位取反(0 ->1 ; 1->0 );

  (4)负数的补码 = 它的反码 +1;

  (5)0的反码、补码都是0;

  (6)在计算机运算的时候,都是以补码的方式来运算的;

  

  例子:

  下面我们就使用“有符号数”来模拟一下,在计算机中是怎样运算的。

  (1)正数相加:

 例如:1+1 ,在计算机中运算如下: 
 1的原码为: 
 00000000 00000000 00000000 00000001 
 因为“正数的原码、反码、补码都一样”,所以,1的补码 = 1的原码,所以 1的补码+ 1的补码 就等于: 
 00000000 00000000 00000000 00000001 
 +

       00000000  00000000  00000000  00000001

 = 
 00000000 00000000 00000000 00000010 
 00000000 00000000 00000000 00000010( 转换为10进制) = 0*2^0 + 1*2^1 = 0 + 2 =2 
  (2)正数相减:

 例如:1-2,在计算机中运算如下: 
 在计算机中减运算其实是作为加运算来操作的,所以,1-2 = 1 + ( -2 ) 
 第一步:把 1补码找出来(因为正数的原码、反码、补码都一样,所以我们可通过原码直接获取补码): 
 1的补码: 
 00000000 00000000 00000000 00000001 
 第二步:把-2的原码找出来: 
 -2的原码: 
 10000000 00000000 00000000 00000010 
 第三步:把-2的反码找出来: 
 -2的反码: 
 11111111 11111111 11111111 11111101 
 第三步:把-2的补码找出来: 
 -2的补码: 
 11111111 11111111 11111111 11111110 
 第四步:1的补码与-2的补码相加: 
 00000000 00000000 00000000 00000001 
 +

          11111111     11111111     11111111      11111110

 = 
 11111111 11111111 11111111 11111111 
 第五步:将计算结果的补码转换为原码,反其道而行之即可(如果想将二进制转换为十进制 必须得到二进制的原码) 
 补码:11111111 11111111 11111111 11111111 
 = 
 反码:11111111 11111111 11111111 11111110 
 = 
 原码:10000000 00000000 00000000 00000001 
 第六步:将计算结果的二进制原码 转换 为十进制 
 二进制原码:10000000 00000000 00000000 00000001 = 1*2^0 = -1 

JAVA中所有的数字变量都是有符号(正负)的?
这句话,还有点争议。在Java中char类型是:16位Unicode字符,取值范围 0 ~ 65535 ,
不存在负数范围,从这点上说:“char类型就是一个无符号数”;

注意点:
(1)正数的原码、反码、补码都一样;
(2) 如果想将 二进制 转为 十进制,必须使用 二进制的原码;

原码、反码、补码 二进制表示数字:

在这里插入图片描述

与君共勉

我要一步一步往上爬
在最高点乘着叶片往前飞
任风吹干流过的泪和汗
我要一步一步往上爬
等待阳光静静看着它的脸
小小的天有大大的梦想
我有属于我的天
任风吹干流过的泪和汗
总有一天我有属于我的天
1

今天的文章<java基础知识复习>原码、反码、补码 二进制表示数字分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/22921.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注