【java学习】进制

目录结构:

contents structure [-]

  1. 为什么计算机代码需要2进制表示
  2. 原码、反码和补码的关系
    1. 为什么需要反码、补码
  3. 进制的转化
    1. 十进制和二进制的相互转化
    2. 八进制和二进制的相互转化
    3. 十六进制和二进制的相互转化
  4. 一个字节能够表示的数据范围

1,为什么计算机代码需要用2进制表示

  大家都知道我们熟练的机制是十进制,也就是(0到9),逢10进1。如果要让电脑使用十进制,首先,应该让电脑能够识别出10个数字。通常的考虑是,通过元器件中电压的高低水平来分别标识10个数字。假如最高电压为10V,那么每个数字标识的就是1V,这种情况造成的后果就是每个数字的电压很容易收到外界电压干扰。除了这种问题,还有一个更大的问题,就是如果要在硬件上识别这10中状态,其电路结构将非常复杂。

   由于二进制数只有2个数码,电路就很简单了,因为只有两种稳定状态下的元件。二进制主要有以下优点:

  *运算规则简单

  *适合逻辑运算

  *易进行转化

  *抗干扰能力强

2,原码、反码、补码的关系

  首先需要知道,电脑的编码都是补码,正数的原码、反码和补码都是一样的,负数的补码的是原码按位取反得到反码后再加1。

  比如:

    1的原码为:00000001

    1的反码为:00000001

    1的补码为:00000001

    -1的原码为:10000001

    -1的反码为:11111110

    -1的补码为:11111111

  2.1为什么需要反码、补码

    计算机中没有减法、乘法、除法运行,都是通过加法来实现的。比如通过1+(-1)来实现减法。

    不使用反码和补码:

      3-2=3+(-2)=0000 0011+1000 0010=1000 0101=-5

      显然结果不正确。

    使用反码不使用补码:

      3-2=3+(-2)=0000 0011+1111 1101=1 0000 0000=0

      这里得到结果的二进制有9位,如果我们只是考虑8位,那么结果取后面8个0,转化位十进制也就是0。

    使用反码使用补码

      3-2=3+(-2)=0000 0011+1111 1110=0 0000 0001=1

3,进制的转化

  3.1 十进制和二进制的相互转化

  十进制转二进制规则:整数部分除2取余,倒序排列。小数部分乘2取整,正序排列。

  例如

    某个数字:15.4

    整数部分为:0000 1111。

    小数部分为:

      0.4*2=0.8 取整为0 余下 0.8

      0.8*2=1.6 取整为1 余下 0.6

      0.6*2=1.2 取整为1 余下 0.2

      ...........

    保留两位小数,则是01

    于是15.4的二进制为0000 1111.01,可通过在线二进制转化器进行验证

  二进制转十进制的规则:按权展开,以此相加。

  例如

    某个二进制:0000 1111

    转化为十进制:1*2^(0)+1*2^(1)+1*2^(2)+1*2^(3)+0*2^(4)+0*2^(5)+0*2^(6)+0*2^(7)=15

  3.2 八进制和二进制的相互转化

    八进制转二进制规则:“一位转三位”;

    二进制转八进制规则:“三位合一位”;

  3.3 十六进制和二进制的相互转化

    十六进制转二进制规则:“一位转四位”;

    二进制转十六进制规则:“四位合一位”;

4,一个字节能够表示的数据范围

  一个字节有8位,最高位为0表示正数,最高为1表示负数。

  那么:

    一个字节的正数范围“0000 0000 ”-“0111 1111”,转化为十进制就是“0”-“127”。

    一个字节的负数范围“1000 0000”-“1111 1111”,转化为十进制就是“-128”-“-1”。

  所以能够表示的数据范围“-128”-“127”。

时间: 04-16

【java学习】进制的相关文章

JAVA 学习 进制转换

写一个函数trans();    1 能够进行十进制转二进制    2 能够进行十进制转八进制    3 能够进行十进制转十六进制    4 封装函数 代码实现: class ArraryTest { public static void main(String[] args) { int num=60; String str_Bin=toBinary(num); String str_Oct=toOctal(num); String str_Hex=toHex(num); System.out

java 16进制转换10进制

public static String toHexString2(byte[] b) { StringBuffer buffer = new StringBuffer(); for (int i = 0; i < b.length; ++i) { buffer.append(toHexString2(b[i])); } return buffer.toString(); } public static String toHexString2(byte b) { char[] buffer =

Java 10进制转2、8、16进制转换 / 2、8、16进制转10进制转换

public static void main(String[] args) { int i = 10; System.out.println("***********10进制转换2进制.8进制.16进制************"); System.out.println(Integer.toBinaryString(i)); // 10转换2进制 System.out.println(Integer.toOctalString(i)); // 10转换8进制 System.out.p

Java的进制转换操作(十进制、十六进制、二进制)

2014-05-06 17:34 吴文付 最近由于工作上的需要,遇到进制转换的问题.涉及到的进制主要是 十进制,十六进制,二进制中间的转换. 这里整理一下.具体的计划为:封装一个转换类,一个测试类. 1.十进制 转 十六进制: 2.十进制 转 二进制 3.十六进制 转 十进制: 4.十六进制 转 二进制: 5.二进制转 十进制: 6.二进制转十六进制: Java的进制转换操作(十进制.十六进制.二进制),布布扣,bubuko.com

Java基础-进制转换

Java基础-进制转换 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Java 程序中常用的进制 1>.十进制,由"0123456789" 这10个数字组成,逢十进一: 2>.二进制,由"01" 这2个数字组成,逢二进一,以"0b"开头: 3>.八进制,由"01234567" 这8个数字组成,逢八进一,以数字"0"开头: 4>.十六进制,由"0123

java 16进制与字符串直接相互转换

java 16进制与字符串直接相互转换 CreationTime--2018年7月12日09点39分 Author:Marydon 1.16进制转换成字符串 /** * 16进制直接转换成为字符串 * @explain * @param hexStr 16进制字符串 * @return String */ public static String fromHexString(String hexString) { // 用于接收转换结果 String result = ""; // 转

《java版进制转换》

import java.util.Scanner; class 十进制转成十六进制_2 { public static void main(String[] args) { int num = 0; Scanner scan = new Scanner(System.in); System.out.println("请输入一个十进制的整数:"); num = scan.nextInt(); String str_bin = toBinary(num); String str_oct =

java之进制转换

[转载]晨风?0?5?0?2?0?1?6?6 2014年03月08日 于 爱Java 发表 众所周知.程序世界计算机中采用的是二进制,一个数字可以用任意进制表示.所以看一个数据值的同时.还要观察它的进制.以免造成笑话. 此时.进制之间的转换我也必然需要熟知.做到心中有数.下面就进制转换为大家提供几点参考. 分析: Java中在声明数字时默认采用的是十进制,可以在数字前加上符号表示数字采用八进制[前面加0(零)]或者十六进制[前面加上0x(零x)]. Java的整型封装类Integer和Long提

Java:进制转换

进制转换是常常需要的一种数据处理,在java中的一些类中封装了具有转换功能的方法,这个不做介绍.其实,进制之间的转化是通过先位异或&,再位移动>>>的方式实现的. 例如,对于一个十进制的整数而言,Int整型占4个字节,每一个字节为8个bit位,所以整型数据有32位bit.将整型转换为二进制,需要先将基数num=num&1,然后将32位bit右移>>>1位,直到num!=0条件不满足即可 将整型转换为八进制,需要先将基数num=num&7,然后将3

java高精度进制转换

POJ1131   由于本题只有小数部分(整数部分均为0),故在进制转换的之后只能自己手写转换方法了.   8进制转换10进制的方法为,以0.75为例,应是7*8^-1 + 5*8^-2.所以呢,可以直接定位到小数点后一位,采用此方法进行计算. 1 import java.util.*; 2 import java.math.*; 3 4 public class Main 5 { 6 public static void main(String []args) 7 { 8 Scanner ci