• 二进制,十进制,八进制,十六进制之间的转换


    计算机内部只有二进制,包括字符数据等 
     int i = 15; //00000000 00000000 00000000 00001111 ==>  1字节 = 8位
                1Byte = 8 bit
                int 有4个字节,即32位
     char c = 'a'; //00000000 01000001
      计算机内部使用的二进制位都是补码的形式
      (此处用1个字节表示)
      15:
       原码00001111 ==>补码 00001111
       整数的原码和补码相同
      -15:
       15的原码 ==>反码+1 ==> 补码
       原码00001111 ==> 反码11110000 +1 ==>补码 11110001
        如果用2个字节表示-15的反码
         原码00000000 00001111
         反码11111111 11110001
        如果用3个字节表示-15的反码
         原码00000000 00000000 00001111
         反码11111111 11111111 11110001
        以此类推
        可以用System.out.println(Integer.toBinaryString(a));打印验证

      int i=-1;//11111111 11111111 11111111 11111111
      int i = -2147483648(int中最小的负数)//100000000 00000000 00000000 00000000
      

    十进制是人类的习惯
     计算机在输出时候根据人类习惯输出10进制
      赋值的时候默认是赋值10进制
     
     计算机默认接受10进制,自动转换为二进制数据
     16进制是二进制的简写
      方便人类书写和记忆
      0xff -> 11111111
    转换
       int x = 020;//八进制  0开头
       八进制==>十进制
        020==>2*8+0
        0120 ==> 1*8^2 + 2*8^1 + 0
        01234 --> 1*8^3 + 2*8^2 + 3*8 +4 

       x = 0x2E;//十六进制  0x开头
       十六进制 ==>十进制
        x=0x2E; ==> 2*16^1 + e =46
        x= 0x1234 ==> 1*16^3 + 2*16^2 + 3*16 + 4

       二进制 ==> 十进制
        0000 1111 ==> 1*2^3 + 1*2^2 + 1*2 + 1 =15
        0100 1001 ==> 1*2^6 + 1*2^3+1 =
       
      十进制 ==>二进制  
      1)除二取余
       28/2  14/2 7/2   3/2  1/2  0
       0 0 1 1 1 0 ==>倒序1 1100
       37/2 18/2  9/2  4/2  2/2
       1 0 1 0 1  ==>倒序(如果需要则前面补0) 0001 0101
      2)对应权重 (简化算法) 
       int x =37;
       32 + 4 +1
       0010 0101    // 128 64 32 16 8 4 2 1
                0 0 1 0 0 1 0 1
       998
       998 - 512 = 486 - 256 = 230 -128 = 102 - 64 = 38 -32   =6-4 =2-2 =0
       1111100110 //512    256  128  64   32      16     8      4      2      1
                               1      1     1      1     1       0      0       1      1      0   
      
      八进制 ==> 二进制
       int x = 01234;用三个二进制位表示一个八进制位
       000 001 010 011 100
      十六进制 ==> 二进制
       int x = 0x1234; 用4个二进制表示一个16进制位
       0001 0010 0011 0100

       0x12345678==>0001 0010 0011 0100 0101 0110 0111 1000
      二进制 ==> 16进制
      0000 0111 1111 1110  ==> 0x07FE;
      一般用16进制表示二进制
      例x = 0x7FE ;//0000 0111 1111 1110,直接赋值则以为是八进制(因为以0开头)



  • 相关阅读:
    windows权限维持
    pocsuite3检测工具 编写poc
    php异或免杀
    python 多线程ftp爆破
    python ip查询 whois查询 # CDN查询# 子域名查询# 端口扫描
    python src批量爬取
    qykcms 审计
    dedecms审计
    EasySNS 审计
    zzcms审计
  • 原文地址:https://www.cnblogs.com/hqr9313/p/2438290.html
Copyright © 2020-2023  润新知