Java基础知识IV

Java基础知识IV

进制

1.二进制

什么是2进制

逢二进一的计数规则

如何将2进制转换为10进制?
将一个2进制数每个1位置的权值累加即可

Java 所有的变量\常量存储的都是2进制数!

 public class Demo01 {
        public static void main(String[] args) {
            /*
             1.java在编译期间将10进制数编译为2进制数,按2进制来运算
                 .java(50) 编译后 .class(110010)
             2.Integer.toBinaryString()可以将底层的2进制数显示出来
             3.int类型是32位2进制数,显示2进制数时自动省略高位0
             4.System.out.println()将2进制转换为10进制输出
             */
            int n = 50; //110010
            System.out.println(Integer.toBinaryString(n)); //2进制
            n++; //110011
            System.out.println(n); //10进制
            System.out.println(Integer.toBinaryString(n)); //2进制
        }
    }

2.十六进制

什么是16进制

逢16进1的计数规则
因为2进制的书写太繁琐麻烦

00000000 00000000 00000000 00110010
1

所以常常用16进制来缩写2进制数字
怎么缩写:将2进制从最低位开始,每4位2进制缩写为1位16进制

 public class Demo02 {
        public static void main(String[] args) {
            /*
              16进制:缩写2进制
               1)0x是16进制字面量前缀,0x开头则编译器按照16进制编译
               2)Java 7提供了2进制字面量前缀 0b----不用,一般都用16进制
             */
            int n = 0x4f057afe; //0x表示16进制
            int m = 0b1001111000001010111101011111110; //0b表示二进制
            System.out.println(Integer.toBinaryString(n)); //按2进制输出
            System.out.println(Integer.toBinaryString(m)); //按2进制输出
            //结论:用16进制来表示2进制更方便

            /*
             8进制:
             1)逢8进1的计数规则
             2)前缀0表示为8进制
             3)数字:0,1,2,3,4,5,6,7,没有7以上的数字
             */
            //----小面试题(8进制平时不用)
            //权     64 8 1
            int x =  067; //0开头表示8进制
            System.out.println(x); //十进制的55(6个8加上7个1)

        }
    }

3.补码

计算机中处理有符号数(正负数)的一种编码方式,java中的补码最小类型是int,32位数

以4位2进制为例讲解补码的编码规则:
计算的时候如果超出4位数就自动溢出舍弃,保持4位数不变
将4位2进制数分一半作为负数使用
最高位称为符号位,高位为1是负数,高位为0是正数

int n = -3;
        System.out.println(Integer.toBinaryString(n));

        /*
        规律数:
        1)0111为4位补码的最大值,规律是1个0和3个1,可以推导出:
          32位补码的最大值,是1个0和31个1-----(011111111...)
        2)1000为4位补码的最小值,规律是1个1和3个0,可以推导出:
          32位补码的最小值,是1个1和31个0-----(100000000...)
        3)1111为4位补码的-1,规律是4个1,可以推导出:
          32位补码的-1是,是32个1------------(11111111...)
        */    
        int max = 2147483647; //int的最大值
        int min = -2147483648; //int的最小值
        System.out.println(Integer.toBinaryString(max)); //011111...
        System.out.println(Integer.toBinaryString(min)); //100000...
        System.out.println(Integer.toBinaryString(-1)); //11111...

深入理解负值:
记住-1的编码是32个1
用-1减去0位置对应的权值

    11111111111111111111111111111111 = -1
    11111111111111111111111111111101 = -1-2 = -3
    11111111111111111111111111111001 = -1-2-4 = -7
    11111111111111111111111110010111 = -1-8-32-64 = -105

互补对称:

公式:-n=~n+1 结论:一个数的补码=这个数取反+1

举例说明:
int n = -3;
int m = ~n+1;
System.out.println(m); //3 -3的补码就是-3取反+1

4.位运算

~ 取反
& 与运算
| 或运算
运算符:>>> 右移位运算
运算符:<< 左移位运算
& 与运算

基本规则:有0则0

0 & 0 = 0
0 & 1 = 0
1 & 0 = 0
1 & 1 = 1

运算的时候将两个数字对齐,将对应位进行与运算

| 或运算

基本规则:有1则1

0 | 0 = 0
0 | 1 = 1
1 | 0 = 1
1 | 1 = 1

运算符:>>> 右移位运算

基本规则:将2进制数整体向右移动,低位自动溢出舍弃,高位补0

<<左移位运算

基本规则:将2进制数整体向左移,高位溢出舍弃,低位补0

我是将军;我一直都在,。!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值