计算机的二进制规则

来源:互联网 发布:淘宝企业店铺装修教程 编辑:程序博客网 时间:2024/05/16 13:02

一.int和long转化为二进制输出结果

package day03;public class Demo1 {public static void main(String[] args) {int i=0xf;//十六进制System.out.println(Integer.toBinaryString(i));//1111int a = -1;long l = -1l;System.out.println(Integer.toBinaryString(a));//32位System.out.println(Long.toBinaryString(l));//64位System.out.println(Long.toBinaryString(a));//64位}}

二.调取int最大值跟最小值

package day03;public class Demo2 {public static void main(String[] args) {int max = Integer.MAX_VALUE;//max=0x7fffffff——>2147483647System.out.println(max);System.out.println(Integer.toBinaryString(max));int min = Integer.MIN_VALUE;//min=0x80000000——>-2147483648System.out.println(min);System.out.println(Integer.toBinaryString(min));}}

三.~——>取反符号,-n=~n+1,二进制的规则如下:

package day03;public class Demo3 {public static void main(String[] args) {int n = 8;//n = 00000000 00000000 00000000 00001000——>显示栏显示1000//~n= 11111111 11111111 11111111 11110111——>-9//~n+1 = 11111111 11111111 11111111 11111000——>-8int m = ~n+1;System.out.println(n);System.out.println(Integer.toBinaryString(n));System.out.println(~n);System.out.println(Integer.toBinaryString(~n));System.out.println(m);System.out.println(Integer.toBinaryString(m));int i =100;//i = 00000000 00000000 00000000 01100100——>显示栏显示1100100//~i= 11111111 11111111 11111111 10011011//~i+1 = 11111111 11111111 11111111 10011100System.out.println(Integer.toBinaryString(i));System.out.println(~i);System.out.println(Integer.toBinaryString(~i));System.out.println(Integer.toBinaryString(~i+1));}}

四.char类型是Unicode编码的整数

package day03;public class Demo4 {public static void main(String[] args) {// char类型是Unicode编码的整数——>Unicode:一个符号一个数,将字符转换为数据!//Java char类型是Unicode3.2,65535个字符int i = 'm';System.out.println(i);//109int l = '敏';System.out.println(l);//25935int j = '馨';System.out.println(j);//39336}}

五.互联网或者文件都是按照byte(8位数)进行数据传输的
字符数据在互联网(文件)传输时候必须拆分位byte(8位)进行传输
——>将字符数据拆分位byte数据的过程称为:编码
——>将byte数据重载合并为字符数据分过程称为:解码

1.与运算 & (逻辑乘法)——>两个二进制数字对其位,上下进行 & 运算

int n = 0x4eed;——>100111011101101
int m = 0x3f;——>111111
int k = n&m;——>截取n的后六位101101

2.或运算 | (逻辑加法)——>两个二进制数字对其位,上下进行 & 运算


int n = 0x2d;//101101
int m = 0x80;//10000000
int k = n|m;//10101101

3.>>>(逻辑右移位计算)
int n = 0x4eed;——>100111011101101
int m = n>>>6;——>100111011(右移六位,右边六位丢失)

4.<<(数学左移位计算)

优化计算为:n*8为——>n<<3
int n =110010;——>50
int m =n<<1;——>1100100——>100(左移一位,因为二进制所以变成两倍)

5.>>(数学右移位计算)
>>>与>>的差别
数学右移位>>,正数时候高位补0,负数高位补1
逻辑右移位>>>,正数时候高位补0,负数高位补0
正数时候因为二进制所以减小两倍50——>25
负数时候(二进制)数学右移位>>扩大两倍-50——>-25

6.UTF-8——>3字节编码:1110xxxx10xxxxxx 10xxxxxx
——>解码

package day03;public class Demo9 {public static void main(String[] args) throws Exception{int n = '中';//100111011101101int m = 0x3f;//111111int i = 0x80;//10000000int j = 0xf;//1111int k =0xe0;//11100000int b3 =n&m | i;int b2 =(n>>>6) & m | i;int b1 =(n>>>12) & j | k;//验证一下:new String(byte, 编码方案)//将bytes数据进行编码byte[] bytes = {(byte)b1,(byte)b2,(byte)b3,(byte)b1,(byte)b2,(byte)b3};String str = new String(bytes,"UTF-8");System.out.println(str);//中//解码int ch = (b1&0xf)<<12 | (b2&0x3f)<<6 | (b3&0x3f)<<0;System.out.println((char)ch);//中}}


原创粉丝点击