`
prowl
  • 浏览: 80679 次
  • 性别: Icon_minigender_1
  • 来自: 艾泽拉斯
社区版块
存档分类
最新评论

最近老是在二进制数制上举棋不定,花了1上午时间翻阅资料,记录下来!!

    博客分类:
  • j2se
阅读更多
先列几个概念:

1、原码:

原码表示法是机器数的一种简单的表示法。其符号位用0表示正号,用1表示负号,数值一般用二进制形式表示。数值有正负之分,计算机就用一个数的最高位存放符号(0为正,1为负).这就是机器数的原码了.假设机器能处理的位数为8.即字长为1byte,原码能表示数值的范围为:(-127~-0 +0~127)共256个


例:
     7的原码:0000 0111
   -7的原码:1000 0111

7+(-7): 0000 0111 + 1000 0111 = 1000 1000 = 120(显然不对)

所以引入了 2、反码 :

反码可由原码得到。如果机器数是正数,则该机器数的反码与原码一样;如果机器数是负数,则该机器数的反码是对它的原码(符号位除外)各位取反而得到的。反码的取值空间和原码相同且一一对应。

例:
    5的原码:0000 0101
   -7的反码:1111 1000(原码:1000 0111 除符号位按位取反)

5+(-7): 0000 0101 + 1111 1000 = 1111 1101(反) = 10000010(原) = -2 (正确)

1+(-1):0000 0001 + 111111110 = 1111 1111 = -0 (错误)

问题出现在(+0)和(-0)上,在人们的计算概念中零是没有正负之分的.(印度人首先将零作为标记并放入运算之中,包含有零号的印度数学和十进制计数对人类文明的贡献极大).

于是就引入了3、补码:

负数的补码就是对反码加一,而正数不变,正数的原码反码补码是一样的.在补码中用(-128)代替了(-0),所以补码的表示范围为:(-128~0~127)共256个。

注意:

1.(-128)没有相对应的原码和反码, (-128) = (10000000)

2.正数的补码、反码都和原码一样



4、关于右移(>>)和无符号右移(>>>)

	byte b = (byte) 0xf1;
	byte c = (byte) (b >> 4);// 有符号右移
	byte d = (byte) (b >>> 4);// 无符号右移(即高位自动填充0)
	byte e = (byte) ((b & 0xff) >> 4);
	System.out.println(b);
	System.out.println(c);
	System.out.println(d);
	System.out.println(e);


结果:
-15
-1
-1
15


为什么c和d的结果是一样的,而e却实现了无符号右移?

首先,在执行b>>4或b>>>4操作时jvm都会先将b转为int型:

1111 1111,1111 1111,1111 1111,1111 0001

>>4 : 1111 1111,1111 1111,1111 1111,1111 1111
>>>4: 0000 1111,1111 1111,1111 1111,1111 1111

转为byte时,截取后8位:1111 1111 其为 -1 的补码。

而先执行了(b & 0xff)操作之后其转为int的二进制:

0000 0000,0000 0000,0000 0000,1111 0001

>>4: 0000 0000,0000 0000,0000 0000,0000 1111

转byte: 0000 1111 故结果为:15

移位操作特别注意:比如int型右移x位, 实际上执行的操作时 x=x%32,所以右移32位实际上是右移了0位!!



分享到:
评论
3 楼 xu_ch 2009-11-27  
补码=反码+1
2 楼 prowl 2009-11-26  
langyu 写道
因为补码的存在问题,我纠结了很长时间

之前一直用却不清楚这些概念,今天花时间好好看看,其实不难~
1 楼 langyu 2009-11-26  
因为补码的存在问题,我纠结了很长时间

相关推荐

    计算机数制二进制十进制十六进制总结PPT课件.pptx

    数制之间的转换是计算机数制中最重要的操作,包括二进制转十进制、十进制转二进制、十六进制转二进制、八进制转二进制等。每种转换都有其特点和方法。 七、常用数制间的转换 常用数制间的转换包括将二进制数转换成...

    数制转换软件2进制10进制16进制

    数制转换软件2进制10进制16进制数制转换软件2进制10进制16进制数制转换软件2进制10进制16进制数制转换软件2进制10进制16进制

    二进制数制及其相互转换PPT学习教案.pptx

    二进制数制是计算机科学的基础,它使用0和1两个数码来表示数值。数制的概念包括数码、基数和位权。数码是指数制中表示数值大小的不同数字符号,例如,二进制有2个数码:0和1。基数是数制中数码的个数,比如二进制...

    VC 各种进制 数制相互转换程序.rar

    VC 各种进制 数制相互转换程序,程序支持在二进制、八进制、十六进制、十进制之间转换。源码中ConvertNum目录内的是进制转换控件的源代码,编译后,要将生成的DLL控件拷贝至ConvertDemo目录的Debug目录下运行,也...

    整理的二进制和十进制、八进制等数制之间的转换PPT

    - **十进制到二进制**:使用降幂法(也称为除二取余法),不断将十进制数除以2,记录下每次的余数,直到商为0。例如,27D转换为二进制,即27 ÷ 2 = 13...1,13 ÷ 2 = 6...1,6 ÷ 2 = 3...0,3 ÷ 2 = 1...1,1 ...

    数制与编码二进制说课稿配套教案.docx

    《数制与编码:二进制的理解与应用》 数制是表示数字的系统,不同的数制有不同的基数和表示方式。在计算机科学中,二进制(Binary)扮演着至关重要的角色,它是所有数字信息的基础表示形式。本课程旨在帮助学生理解...

    计算机二进制转换基础知识

    教程名称:计算机二进制转换基础知识课程目录:【】0.课程简介【】1....十进制与其它进制的转换【】计算机进制转换二进制、八进制转课程资料 源码 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。

    二进制是计算技术中广泛采用的一种数制

    二进制,作为计算技术中的基础,是一种使用0和1两个数字进行计数的数制。这个数制的精髓在于其简洁性和效率,特别是在计算机科学领域,因为计算机硬件可以直接理解和处理0和1的状态,这与电子元件的开/关状态完美...

    16进制转换成二进制

    16进制是一种基于16的数制系统,它使用0到9的数字以及A到F(代表10到15)来表示数值,而二进制则基于2的数制系统,只使用0和1。了解这两种进制之间的转换对于理解计算机内部的工作原理至关重要,因为计算机底层数据...

    1.二进制字符串转十进制数值_labview_二进制转十进制_

    在LabVIEW编程环境中,二进制字符串转换为十进制数值是常见的操作,尤其是在处理数据或进行计算时。本文将详细讲解如何利用LabVIEW实现这一转换,并探讨相关知识点。 首先,我们要理解二进制和十进制之间的基本概念...

    负数的二进制算法.doc

    这是因为计算机使用二进制数制来存储和处理数字,而二进制数制的第一位数字决定了数字的符号位。 二、负数的二进制表示形式 负数的二进制表示形式是通过将正数的反码加上补码来获得的。反码是通过按位取反操作获得...

    十进制数转换为二进制,八进制,十六进制数

    用数据结构栈实现的数制转换,将十进制数转换为二进制,八进制,十六进制。

    第三讲数制数制单片机进制PPT资料.ppt

    第三讲数制数制单片机进制PPT资料.ppt 本节课程主要讲解数制的概念、单片机中的数制、数制之间的转换、计算机科学中的数制、数据在单片机中的组织结构等内容。 一、数制的概念 数制是指数字在一个数中所处的位置...

    二进制运算及转换PPT课件.pptx

    二进制数是一种特殊的数制,它只有两种数码:0和1。二进制数的基数是2,进位规则是“逢二进一”,借位规则是“借一当二”。 二进制数可以表示为:C = cn × 2^n + cn-1 × 2^(n-1) + … + c1 × 2^1 + c0 × 2^0,...

    计算机数制二进制十进制十六进制总结PPT学习教案.pptx

    主要涉及三种常见的数制:二进制、十进制和十六进制。这些数制之间的转换对于理解和操作计算机数据至关重要。 二进制(Binary)是计算机内部处理数据的基础,只包含两个数字0和1。在二进制数中,每一位的权重是2的...

    基础知识 二进制(上篇).pdf

    二进制,或称二进位制,是计算技术中的一种基本数制,它只使用两个符号:0 和 1,代表电路中的“开”和“关”状态。这种数制是现代计算机运算的基础,因为计算机内部的所有操作,无论是数据存储还是计算,都是通过...

    16进制显示转换二进制.vi_16进制转化二进制_

    在计算机科学和编程领域,数据通常以不同的形式存在,其中最常见的是二进制和十六进制。这两种表示方式在处理数字和数据时都扮演着重要角色。标题"16进制显示转换二进制.vi_16进制转化二进制_"暗示这是一个虚拟仪器...

    二进制十进制十六进制转换

    例如,十进制数25可以转换为二进制:25 = 1×2^4 + 1×2^2 + 0×2^1 + 1×2^0,所以十进制的25在二进制下为11001。 十六进制(Hexadecimal)是为了简化二进制表示而引入的,它使用0-9和A-F这16个符号。每个十六进制...

    二进制计算器(收藏)

    在二进制计算器中,用户可以进行二进制与其他数制(如十进制、八进制、十六进制等)之间的转换,这对于编程、数据分析以及理解计算机工作原理有着极大的帮助。 首先,让我们来了解一下二进制转换的基本概念: 1. *...

    二进制、十进制、十六进制转换

    在计算机科学中,二进制、十进制和十六进制是三种常见的数值表示系统,它们在编程、硬件设计和数据存储中起着至关重要的作用。理解这些进制之间的转换对于任何IT专业人员来说都是基础。 **二进制(Binary)**: 二...

Global site tag (gtag.js) - Google Analytics