zoukankan      html  css  js  c++  java
  • java-整型数值 用 16进制转换、2进制转换-Integer.toHexString

    1. 负数为什么要用补码表示

      1. 可以将符号位和其它位统一处理
      2. 减法也可按加法来处理
      3. 另外,两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃
    2. 正数:原码、反码、补码相同。
      负数:反码符号位不变化,其余位数取反,补码即为反码+1。
    3. 假设当前时针指向11点,而准确时间是8点,调整时间可有以下两种拨法:
          一种是倒拨3小时,即:11-3=8
          另一种是顺拨9小时:11+9=12+8=8
          在以模为12的系统中,加9和减3效果是一样的,因此凡是减3运算,都可以用加9来代替。对“模”12而言,9和3互为补数(二者相加等于模)。所以我们可以得出一个结论,即在有模的计量系统中,减一个数等于加上它的补数,从而实现将减法运算转化为加法运算的目的。

    4. 为了显示一个byte型的单字节十六进制(两位十六进制表示)的编码,请使用:

      Integer.toHexString((byteVar & 0x000000FF) | 0xFFFFFF00).substring(6)

       byteVar & 0x000000FF的作用是,如果byteVar 是负数,则会清除前面24个零,正的byte整型不受影响。(...) | 0xFFFFFF00的作用是,如果byteVar 是正数,则置前24位为一,这样toHexString输出一个小于等于15的byte整型的十六进制时,倒数第二位为零且不会被丢弃,这样可以通过substring方法进行截取最后两位即可。

    5. System.out.println(Integer.toHexString(2));//2
      System.out.println(Integer.toHexString(15));//f
      System.out.println(Integer.toHexString(16));//10
      System.out.println(Integer.valueOf("F", 16));//16
      
      
      //负整数时,前面输入了多余的 FF ,没有去掉前面多余的 FF,按并双字节形式输出
      System.out.println(Integer.toHexString(-2).toUpperCase());//FFFFFFFE
       //实质上0xFF会像转换成0x000000FF后再进行位运算
      System.out.println(Integer.toHexString(-2 & 0xFF).toUpperCase());//FE
      System.out.println(Integer.toHexString(-2 & 0x000000FF).toUpperCase());//FE

    6. //注,FE输出时不会为-2,因为此时不会把FE看成负数,valueOf会把所有数字串看成正的
      System.out.println(Integer.valueOf("FE", 16));//254
      //如果要输出-2,只能按以下形式输出
      System.out.println(Integer.valueOf("-2", 16));//-2
       //所以要把 FE 看成负的话,只能在前面加上负号,但是这里输出还不是-2,
      //而是先计算Integer.valueOf("FE", 16),再在结果前加上负
      System.out.println(Integer.valueOf("-FE", 16));//-254
    7. System.out.println(Integer.valueOf("-80", 16));//-128
      System.out.println(Integer.valueOf("7fffffff", 16));//2147483647
      //System.out.println(Integer.valueOf("80000000", 16));//不能运行,已注掉
      System.out.println(Integer.valueOf("-80000000", 16));//-2147483648
    8. System.out.println(Integer.toBinaryString(-2));//11111111111111111111111111111110
      System.out.println(Integer.toBinaryString(-2 & 0xFF));//11111110
      System.out.println(Integer.toBinaryString(-2 & 0x000000FF));//11111110
      System.out.println(Integer.valueOf("1111111111111111111111111111111", 2));//2147483647
      //System.out.println(Integer.valueOf("10000000000000000000000000000000", 2));
      System.out.println(Integer.valueOf("-10000000000000000000000000000000", 2));//-2147483648
      System.out.println(Integer.valueOf("11111110", 2));//254
      System.out.println(Integer.valueOf("-11111110", 2));//-254
  • 相关阅读:
    UML中类图的符号解释
    Vim简明教程【CoolShell】
    C++ 指针—02 指针与引用的对照
    一个通用onReady函数的实现
    内存泄漏以及常见的解决方法
    个人博客之路
    WPF 设置WebBrowser控件不弹脚本错误提示框
    Solr使用入门指南
    用C语言写解释器(一)——我们的目标
    数据库索引的作用和长处缺点
  • 原文地址:https://www.cnblogs.com/jiangtao1218/p/10371778.html
Copyright © 2011-2022 走看看