Java学习 ---- 进制及转换

Day2.01___Java中的常量

  • 字符串常量 —> 用""引起来的常量叫做字符串常量
  • 字符常量 —> 用’ '引起来的常量叫做字符常量,里面只能有一个数字、一个字母、一个符号。没有东西会报错,多个也会报错
  • 整数常量 —> 用数字表示的常量
  • 小数常量 —> 用小数表示的常量
  • 空常量 —> 用null表示的常量(数组中会出现)
  • 布尔常量 —> 用true和false表示的常量


Day2.02___二进制、八进制、十进制、十六进制

  • 二进制 —> 用0、1来表示;表示二进制时,要在前面加上0b,其中b大小写都可以
  • 八进制 —> 将8个0、1分成三个为一组来表示,从后往前,不够的在最前面添加0,八进制中最大的数为7;表示八进制时,要在前面加上0
  • 十六进制 —> 将8个0、1分成四个为一组来表示,从后往前,表示十六进制时,要在前面加上0x,其中x大小写都可以,10-15的数字用字母a-f表示,大小写都可以;十六进制中最大的数为15
  • 特点 —> 进制越大,表现的形式越短
  • 字节表示 —> 在电脑中用8个0、1来表示一个bit(字节)


Day2.03___其他进制转十进制

  • 公式:系数 * 基数 ^权次幂( 权次幂从0开始 )
  • 练习
    二进制转十进制:
    0b100 = 1 * 2 ^ 2 + 0 * 2 ^ 1 + 0 * 2 ^ 0 = 4
    八进制转十进制:
    074 = 7 * 8 ^ 1 + 4 * 8 ^ 0 = 60
    十六机制转十进制:
    0x3c = 3 * 16 ^ 1 + 12 * 16 ^ 0 = 60


Day2.04___十进制转换成其他进制

  • 公式:转成几进制就除以几,最后倒取余即可。需注意的是取余时必须除到商为0才能结束


Day2.05___进制的任意转换—8421法
   1        1       1      1       1        1       1       1
12^7 12^6 12^5 12^4 12^3 12^2 12^1 12^0
 128     64     32     16       8      4       2       1

  • 二进制转换成十进制
    0b101 = 4 + 0 + 1 = 5
    解析:根据对应关系取值,比如0b101里最后边的1就对应上面最右边的1 ,依次 0b101中的0就对应上面倒数第二位1,然后再取出值相加,需要 注意的是,二进 制是由1和0组成的,如果是1就取对应的值,如果是0就 取值为0,如上面的4+0+1,找对应关系时是从右到左
  • 十进制转换成二进制
    80转二进制 = 01010000
    解析:从左向右开始比较,首先比较80与128的大小,80<128,所以左边 第一位取0,然后再用80与64进行比较,80>64,所以取1,取完1后用 80-64=16,用得到的差再与后一位进行比较,16<32,所以后面一位取0 ,再与后面一位比较16=16,所以后面一位取1,再用16-16=0,用得到 的差与后面的数进行比较得到 差都比后面的数小,因此后面全部取0, 得到结果01010000
  • 二进制转化成八进制
    111100 = 4+2+1 4+0+0 = 74
    解析:首先将111100分成两组,一组为111,一组为100;先看100,将最 后边的0与上面的最后边的1对应,0与倒数第二个1对应,1与倒数第三个1 对应,得到对应的数后求和,即4+0+0=4;再看111,将最右边的1与上 面最后边的1对应,中间的1与上面倒数第二个1对应,左边的1与上面倒数 第二个1对应,得到对应的数求和,即4+2+1=7。需要注意的是,分组以 后,每一组的对应都是从最后边开始,这里和二进制转十进制有些不同
  • 二进制转化成十六进制
    111100 = 2+1 8+4 = 3c
    解析:首先将111100分成两组,一组为(00)11,一组为1100,方法与二进制转化为十六进制相同。


Day2.06___原码、反码、补码

  • 在原码中,二进制的最高为表示符号,0为正,1为负,符号无论什么码都不变符号
    0 0001101 原码
    0 0001101 反码
    0 0001101 补码
    总结:正数的原码、补码、反码都是相同的
  • 在原码中,二进制的最高为表示符号,0为正,1为负符号
    1 0001101 原码
    1 1110010 反码 —> 将原码的每一位取相反值
    即原码是0,反码就取1,
    取反时最高位符号位不变
    0 0000001 +1
    ----------------------------
    0 1110011 补码 —> 补码=反码+1
    总结:负数的补码=原码取反+1;负数的原码=补码-1取反
  • 计算机中记录的都是原码,而我们在进行数学计算时,用的时补码相加
  • 已知补码为10010010,求原码?
    符号
    1 0010010 补码
    1 0000001 -1
    ------------------------
    0 0010001 反码
    1 1101110 原码
    所以原码为11101110
  • 在+1时,等于2了就向前进一位,与十进制加减一样;在-1时,向前借一位,前面就得退一位,与十进制加减一样


Day2.07___隐形转换

  • 当byte、short型的数据与int类型的数据进行计算时,java虚拟机会将byte、short类型的数据隐形转换成int类型
  • 数据类型空间从小到大排序:
    byte、short、char < int <long < float < double
  • 实例:
    byte b1,b2,b3;
    b2 = 10,b3 = 10;
    b1 = b2 + b3;         // (1) 会报错,损失精度
    b1 = 3 + 5;             // (2) 不会报错
    b1 += 12;               // (3) 不会报错
    原因:
    (1)是两个变量相加,在运算时会自动类型提升( 隐式提升 )
    (2)是两个常量,两个常量相加以后为7,在byte的范围内,所以不会报错( 常量优化机制 )
    (3)使用+=符号,再进行运算后会将结果自动强制进行转换为byte类型,即b1 = (byte)( b1 + 12 )

    注意:+=、-=、*=、/=、%=这一类型的赋值运算符都会先 运算,再将值自动强制转换后进行赋值
  • 实例:
    System.out.println(‘a’);         //  输出a
    System.out.println(‘a’ + 1);     //   输出98----->原因:隐式类型提升
  • ASCII码表三个值:
    (1) ‘a’ 97
    (2) ‘A’ 65
    (3) ‘0’ 48


Day2.08___基本数据类型在内存中的大小

  • byte         1个字节         取值范围-128–127
  • short        2个字节
  • char         2个字节
  • int            4个字节
  • long         8个字节
  • float         4个字节
  • double     8个字节
  • boolean   1/8个字节

猜你喜欢

转载自blog.csdn.net/qq_41898534/article/details/89368414
今日推荐