进制及位运算

来源:互联网 发布:天刀神威捏脸数据 编辑:程序博客网 时间:2024/06/04 01:32

进制及位运算

一、进制
1、分为十进制、二进制、八进制和十六进制
2、逢进制进一
3、十进制:
  (1)逢十进一
 (2)形式:234=2*10^2+3*10^1+4*10^0
 (3)数字只能是0到9
4、二进制
(1)逢二进一
(2)形式:1010=1*2^3+0*2^2+1*2^1+0*2^0=10(二进制转化成十进制)
 (3)记住8421    2^10=1024
(4)在计算机中能够大量使用
(5)十进制转二进制,用除二取余法
5、八进制
(1)逢八进一
(2)形式:567=5*8^2+6*8^1+7*8^0=375(八进制转化成十进制)
(3)二进制转化成八进制的规律:每三位转化成一位八进制
         例:001-111-000-101-010→17052      756→111-110-101
(4)在老的编辑语言中,使用八进制
6、十六进制
(1)逢十六进一
(2)0-F分别表示0-15:A=10、B=11、C=12、D=13、E=14、F=15
(3)颜色,经常用两个十六进制位表示八个二进制位
(4)形式:E2=E*16^1+2*16^0=14*16^2+2*16^0=226(十六进制转化成十进制)
(5)二进制转为十六进制的规律:每四位转化成一位十六进制
例:1011-1101→BD       AF1→1010-1111-0001
7、m进制转十进制:m^(n-1)+m^(n-2)+m^(n-3)+……+m^0(初始数据为11111……111)
8、十进制转m进制:除m取余数
二、位运算
1、位运算的性能高
2、分为&(与)、|(或)、^(异或)、~(取反)、>>(右移)、<<(左移)、>>>(无符号移动)
3、&:按位与,两个都是1才为1
     例:class BitDemo1{
                  public static void main(String[] args){
                          int a=12;
                        int b=4;
                         int c=a&b;
                    System.out.println(c);
                         }
                      }
             12:0000-0000   0000-0000  0000-0000   0000-1100
              4: 0000-0000   0000-0000  0000-0000   0000-0100
        规则:两个都是1才为1;只要有一个是0就是0
   结果:0000-0000 0000-0000 0000-0000 0000-0100:4
4、|:按位或,只要有一个是1就是1
 例:class BitDemo2{
           public static void main(String[] args){
           int a=10;
               int b=6;
                        int c=a|b;
                 System.out.println(c);
                 }
             }
             
            10: 0000-0000   0000-0000  0000-0000   0000-1010
              6: 0000-0000   0000-0000  0000-0000   0000-0110
          结果:0000-0000 0000-0000 0000-0000 0000-1110:14
5、^:异或
(1)不同为1
例:class BitDemo3{
                 public static void main(String[] args){
               int a=10;
                   int b=6;
                 int c=a^b; 
           System.out.println(c);
                  }
              }
      10: 0000-0000 0000-0000 0000-0000 0000-1010
        6: 0000-0000 0000-0000 0000-0000 0000-0110
结果:0000-0000 0000-0000 0000-0000 0000-1100:12
(2)一个数和另一个数异或两次还是自己本身 
       一个数和自身异或结果是0
      一个数和0异或结果还是自己本身
例:class BitDemo5{
           public static void main(String[] args){
             int a=10;
              int b=6;
             a=a^b;
                    b=a^b;
                a=a^b;
                 System.out.println(a);
                  System.out.println(b);
//目的:交换ab的值
// b^b
// 10101001
// 10101001===0;
// a^0
// 1111001010
// 0000000000
// 1111001010
//a^b^b=a;
//a=a^b=10^6;
// b=a^b=10^6^6=10;
// a=a^b=10^6^10=6;
                    }
                  }
(3)可以用作对称加密,解密
6、~:按位取反:0变成1,1变成0
例:class BitDemo7{
       public static void main(String[] args){
       int a=10;
        int c=~a;// 对a按位取反,
// 负数的二进制等于正数的二进制取反+1
// -10=~a+1
// -10=c+1
// c=-11
      System.out.println(c);
       }
    }
结果:-11
7、>>:右移,m>>2:右移2位
(1)右移动多少位就是除以2的多少次方
(2)正数右移,最高位补0,最小是0
(3)负数右移,最高位补1,最小是1
(4)右移的时候,余数一定是正数

例1:class BitDemo8{
           public static void main(String[] args){
             int a=10;
            int c=a>>3; 
 // 10/2^1=5   右移一位是5
// 10/2^2=10/4=2;   右移两位是2
// 10/2^3=10/8=1     右移三位是1
              System.out.println(c);
            }
           }
例2:class BitDemo9{
          public static void main(String[] args){
            int a=-5;
           int c=a>>2;
// -10/2^1=-5     右移一位
//余数肯定是正数
//-10/2^2=-10/4= 
-3      2;右移两位
// -10/8= -2       6;右移三位
// -17 4 / -5         3(运算负数位移的时候,余数一定是正数)
// -180/16    a=-180;c=a>>4;
// -90/8
// -45/4      -12       3
// -5/4       -2           3    a=-5;c=a>>2;
                System.out.println(c);
                }
               } 
8、<<:左移,m<<2,左移两位
(1)左移动多少位就是乘以多少次方
(2)左移后面补0

9、>>>:无符号移动,最高位都补充0
原创粉丝点击