达内二进制的基础学习

1 什么是2进制
  2 进制是一种计数规则
   A 数字 0 1
   B 规则 逢2进1
   C 权 128 64 32 16 8 4 2 1
     2 的幂
  10进制规则
   A 数字 0 1 ... 9
   B 规则 逢10进1
   C 权 1000 100 10 1
     10 的幂
      
  2 进制到10进制的手工算法:
    就是数1的个数
    421
    111(2) = 4+2+1 = 7(10)
   64     1        
    1000001(2) = 64+1 = 65(10)     
    
    1101010(2) = 64+32+8+2 = 106(10)
     
    210(10) = ?(2)
            = 11010010(2)
    128 64 32 16 8 4 2 1
      1  1  0  1 0 0 1 0  
     82 18     2
    
2 为啥要使用2进制
  便宜!制造成本便宜
  用算法解决问题。
   
  java 利用算法解决了 10进制到2进制的相互转换问题
   
  当输入10进制时候,java 将输入的10进制字符串
  转换为 2进制数据,保存到内部
   
  "250" -算法(方法)> 2进制数据 int long
   int n = Intger.parseInt("250")  
    
   n =   
   
  当需要将内存数据显示给用户时候,在利用算法将
  2进制转换为10进制的字符串显示
 
   
 在计算机中:只有2进制, 补码
   
3 2进制在哪里
 
4 进制的计算规则
  补码:最“便宜”的方式实现了负数计算!
   
 16 进制?是2进制的简写!
  a 将每4位2进制简写为一个 16进制数
   
  A 逢16进一
  B 数字:“0 ~ 9a ~ f”   0~15
  C 权 256 16 1  
   
            41(16) = 4*16 + 1 = 65(10)
            4A(16) = 4*16 + 10 = 74(10)
  0000  0
  0001  1
  0010  2
  0011  3
  0100  4
  0101  5
  0110  6
  0111  7
  1000  8
  1001  9
  1010  a
  1011  b
  1100  c
  1101  d
  1110  e
  1111  f
1 0000 10
1 0001 11
 
 0100 0001(2)  41(16) = 64+1 = 4*16+1 = 65
 0100 0010(2)  42(16)    
 
 书写2进制时候为了方便简洁,采用16进制形式书写!
 
 2进制 就是 16进制!
 
 便捷的书写 -1 的2进制
   
  int i = 0xffffffff;// -1
 
 计算机的颜色
    
     R      G       B
   8位数   8位数       8位数
 
 11111111 11111111 11111111  全白
 f   f    f   f    f   f  
   
  int color  = 0xffffff;  表示白色
             = 0xff0000;  红
             = 0xffff00;  
 
 0x000000 ~ 0xffffff;
 0 ~ 16777215
 (int)(Math.random()*0xffffff)
 (int)(Math.random()*16777215)  
   
   
5 2进制计算在开发中的应用
  颜色
  文字编码
   
 如何显示 50% 红
 
 红 0~255
   
  int r = 255/2;//? 是一个8位数
    
  r= 01111111(2) 7f(16) 127(10)  
   
 c = 01111111 00000000 00000000
   = 0x7f 00 00 ;  
    
 c 与 r 的差别 c数字的右侧 比 r多 16个0
     
 c = r << 16;    
 r<<3 =   01111111 <3
       01111111000
 r<<16 = 01111111 00000000 00000000
 
 c = 255/2 << 16;
           
     (255/2<<16) + (255/2<<8) + (255/2)
 
255/2    = 01111111(2)
 
  255/2<<16= 01111111 00000000 00000000  
  255/2<<8 =          01111111 00000000
+ 255/2    =                   01111111
-------------------------------------------
             01111111 01111111 01111111
              
将 3 个 8 位数 拼接为一个 24位的通用算法!
 
 r = 255/2
 g = 255/2
 b = 255/2
   
 color = (r<<16) + (g<<8) + b  
 
将 4 个 8 位数 拼接为一个 32位的通用算法!
 
 b1
 b2
 b3
 b4
 
 int i = (b1<<2) + (b2<<16) + (b3<<8) + b4
 
 为了处理数据:
  32位数据int a  
  a 拆分为 4 个 8位数据 —传送->
  接收方:  4 个 8位数据 拼接为 int数据
 
 << 左移位运算: 经典的将byte数据合并
 >>> 右移位运算:将int、long等数据进行拆分
 >> 右移位运算
 
 文字编码规则
   GBK 编码规则:
    A 变长编码 1~2字节
        英文 1 字节  中文2字节    
        如:"ABC中国" —> {byte * 7}
    B 支持的文字数量:中文+英文 20000+
    C 中国本地最优编码
    
   UTF-8编码规则
    A 变长编码 1~4字节
        英文 1 字节 中文3字节
       如:"ABC中国" —> {byte * 9}  
    B 支持文字数量:100000+
      英文 中 日 韩 希伯来 阿拉伯 ... 等地球上有的!
    C 国际化最优编码       
 
总结:
     
  计算机只能处理“数据”
  程序: 数据 + 算法
   
  1 计算机的内部只有2进制  
  2 2进制可以计数
  3 补码:完成负数计算的!
      优点:能够处理负数问题,满足数学计算规则
      缺点:有溢出计算问题,使用更大范围的补码
      避免溢出问题。
  4 计算机利用API(算法)解决人类使用
   10进制,计算机使用2进制
    Integer.parseInt() 将10进制字符串转2进制
    Integer.toString() 将2进制转换为10字符串
     
  5 如何直接写 2 进制:使用16进制!
   16进制是 2进制的缩写(简写)形式
   4位2进制可以缩写为 1个16进制
   是计算机专业人员书写2进制的方法习惯!
   如:计算机颜色的处理:2进制处理
   常用16进制形式书写颜色值, 非常“方便”!
   red = 0xff0000;
 
  6 2进制的计算:进行数据的拆分和合并计算
   int red=255/2, green=255/2, blue=255/2;
   int color = (red<<16)+(green<<8)+blue;
   new Color(color);
   new Color(red, green, blue);   
    
  7 何时使用 数据的拆分和合并  
    将数据写出到 文件时候(互联网等)要拆分
    称为序列化
  从文件(互联网)读取数据需要合并数据称为
  反序列化  
   
  String 的拆分(序列化) 称为“编码”
  String 的合并(反序列化) 称为“解码”
 
  编码、解码的方式:称为“编码方案”
      
      编码方案:GBK  UTF-8
   
  GBK:中国本地化最优编码
  UTF-8:国际化最优编码
   
  乱码:编码和解码时候的 “编码方案”不一致
   

  随机颜色:经典算法。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值