java学习_二进制

来源:互联网 发布:php 微信拍卖系统源码 编辑:程序博客网 时间:2024/05/23 00:08
二进制:


用16进制简化二进制的书写,4位二进制数可用一位16进制数表示,
例如:
  二进制: 1110 1111 1101
 16进制:  efd   



 int数据类型最高为表示符号位,1为负,0为正
拿byte类型举例,byte占一个字节,8位,表示的数值范围:-128~127
 byte最大数:0111 1111  最小数:1000 0000
 最大数加1,溢出,变为最小数。
 计算机显示的是数据的补码。



 使用原码求真值。


 正数的原码和补码一样,负数原码 = 补码的反码 + 1   
 计算机显示数据时会自动隐藏高位的0
 例如: 
   byte b = 24;
   System.out.println(Integer.toBinaryString(b));//11000
   111000(2)  = 24(10)


   byte b = -14;
   System.out.println(Integer.toBinaryString(b));//11111111111111111111111111110010
    将补码取反:1101 (省去高位0)
    补码+1 = 1110;   这就是-14的原码
    1110(2) = 14 (10)  再加上符号就是10进制的-14.


      以四位二进制数举例,一半为正数,一半为负数,可以看出,
 0000  0001  0010  0011  0100  0101  0110  0111       (0 , 1, 2, 3, 4, 5, 6, 7)
 1111  1110  1101  1100  1011  1010  1001  1000       (-1,-2,-3,-4,-5,-6,-7,-8)
     与运算 & (逻辑乘法)
     规则:
     0 & 0 = 0
     0 & 1 = 0
     1 & 0 = 0
     1 & 1 = 1
     或运算 | 有1为1


编码
网络传输数据一般为8位,所有需要将数据拆分,拆分方式则称为编码。
    将Unicode字符 转换为 UTF-8编码格式  
 
      其格式为:1110 xxxx   //result1
                10xx xxxx   //result2
                10xx xxxx //result3
     UTF-8编码的最后一个字节,将字符的最后6位切下来 拼接最后字节的格式0x80|c&0x3f
     &运算获取最后6位,或运算拼接
                  
 

将字符 中 转换为Utf-8编码格式

//拼接第三个字符

        int c = '中';
int m = 0x3f;     //0011 1111
int _six = c & m;
int two_ = 0x80;
int result3 = _six|two_;
//拼接第二个字符
   int ccc = c>>>6;     //右移六位
   int lk = ccc & m;
   int result2 = lk |0x80;
//拼接第一个字符
int c3 = c>>>12;//右移六位
int mm = 0x0f;
int c4 = c3 & mm;
int  cc = 0xe0;
int result1 = c4 |cc;
    验证:
byte[] bs = {(byte) result1,(byte) result2,(byte) result3};
    String str = new String(bs,"utf-8");
    System.out.println(string);   //中

原创粉丝点击