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位,或运算拼接
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); //中
用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); //中
阅读全文
0 0
- java学习_二进制
- java学习之旅11--【补充】JDK7新特性_二进制整数_下划线分隔符
- java二进制的学习(一)
- Java学习之二进制基础
- java学习笔记--二进制基础
- java学习_起步
- java学习_反射
- Java学习_多线程
- java学习_集合
- 7.15_ java学习_基础
- 二进制_十进制转换
- JAVA学习笔记之二进制、十进制
- 大数据学习--java基础--二进制有关
- java学习_流操作
- Java学习_结构体
- java基础学习_数组
- java学习笔记_线程
- JAVA学习笔记_基础
- 数据仓库
- HashMap的工作原理
- Linux(CentOS)下Postgresql数据库的安装配置
- Android开发60条技术经验总结
- BZOJ3316: JC loves Mkk
- java学习_二进制
- Linux学习笔记--文件共享
- 网站架构学习(三)之架构要素
- HashMap vs. TreeMap vs. Hashtable vs. LinkedHashMap
- HDU
- poj2312优先队列BFS
- QML实现酷炫的 Cover Flow 效果(PathView)
- 强制类型装换
- 判断一个物体是否从摄像机消失