02 进制,数据类型,运算符

1:进制表示

十进制转换为任意进制:除基倒取余
任意进制转十进制:系数+基数的权次幂相加即可,,BCD码(8421码)

原码:二进制定点表示法, 0 正 1 负
反码:正数不变,负数原码除符号位取反
补码:正数不变,负数反码加1

运算是在补码的基础上

 二进制:0b100 八进制:  0100 十进制: 100 十六进制: 0x100

对应十进制   4                     64                      100              256
2:关键字不能作为变量名

3:Java中的数据类型分几类?基本数据类型有哪些?
基本数据类型,和引用数据类型;
基本数据类型分为:
byte  1个字节
short  2
int  4
long 8
boolean  理论上占1/8个字节,但Java中没有明确指定大小
float  4
double 8
char  2 0~65535

同一个区域不能使用相同的变量名

局部变量在使用之前必须赋值

class DataType {
    public static void main(String[] args) 
    {
        byte b = 10;
        short s = 20;
        int i = 30; // 正数默认
        long x = 88888888888L;
        System.out.println(b);
        System.out.println(s);
        System.out.println(i);
        System.out.println(x);

        float f = 12.3F;
        double d = 33.4; // 小数默认 33.4d,d一般不加 
        System.out.println(f);
        System.out.println(d);
        char c = 'a';
        System.out.println(c);
        boolean b1 = true;
        boolean b2 = false;
        System.out.println(b1);
        System.out.println(b2);
    }
}
/*
10
20
30
88888888888
12.3
33.4
a
true
false
*/
View Code

4:数据类型转换:
    隐式转换:小的数据类型转换大的数据类型,
    强制转换:

class DataType2 {
    public static void main(String[] args) 
    {
        // 数据类型装换 Conversion
        // 隐式转换
    //    int x = 3;
    //    byte b = 4;
    //    x = x + b;
    //    System.out.println(x); // 7

        int x = 3;
        byte b = 4;
    //    b = x + b;
    //    System.out.println(b);//错误: 可能损失精度
        b = (byte)(x + b);
        System.out.println(b); // 7
     //    int x = 3;
    //    byte b = 4;
    //    b = x + b;
    //    System.out.println(b);//错误: 可能损失精度
    //    b = (byte)(x + b);
    //    System.out.println(b); // 7
        byte b = (byte)(126 + 4);
         System.out.println(b); // -126
        // 0 0 0 10000010  130的二进制
        // 10000010     -126补码
        // 10000001     -126 反码
        // 11111110     -126 原码
         byte b1 = (byte)(300);
         System.out.println(b1); // 44
        // 1 00101100   300
        //   00101100  byte一个字节 -》 44 } }

 

5 :float与long

class DataTypeConversion {
    public static void main(String[] args) 
    {
        // byte,short,char -- int -- long -- float -- double
        float f = 12.3f;
        long l = 12345;

    //    f = l;  // 隐式转换
    //    System.out.println(f); // 12345.0
 
        l = (long)f;  // 强制转换
        System.out.println(f);
        /*
        float占4个字节 IEEE 754 规定
        32个二进制位,1位代表符号,8位代表指数位.23位代表尾数位
        0-255  0代表0 255代表无穷大,1~254都要减去127,
        得-126 ~ 127

        底层的存储结构不同,float比long的范围要大
        */
    }
}

 6. char相关

class DataChar {
    public static void main(String[] args) 
    {
        System.out.println('a'+1); // 98
        System.out.println((char)('a'+1)); // b
        System.out.println("5+5="+(5+5)); // 5+5=10
        char a = 97;
        System.out.println(a); // a
        char b = '中';
        System.out.println(b); // 中 java中的中文是Unicode编码,每个字符占2个字节
        
    }
}

7. 算数运算

class Operator {
    public static void main(String[] args) 
    {
        System.out.println(10/3); // 3
        System.out.println(10/3.0); // 3.33333333333333335
        System.out.println(2%5); // 2
        System.out.println(-2%5); //-2
        System.out.println(-2%-5); //-2
        System.out.println(2%-5); //2
        System.out.println(13%-5); //3

        int a = 3;
    //    a++;
    //    System.out.println(a); // 4
    //    ++a;
    //    System.out.println(a); // 4

        int b;
    //    b = ++a;  //先加再赋值
    //    System.out.println(a); //4
    //    System.out.println(b); //4

        b = a++; //先赋值再加
        System.out.println(a); //4
        System.out.println(b); //3

    }
}

8 .运算符其他

(逻辑运算符的基本用法)(掌握)
* 逻辑运算符有哪些
    * &,|,^,!
    * &&,|| 
* 注意事项:
    * a:逻辑运算符一般用于连接boolean类型的表达式或者值。
    * b:表达式:就是用运算符把常量或者变量连接起来的符合java语法的式子。
        * 算术表达式:a + b
        * 比较表达式:a == b(条件表达式)
* 结论:
* &逻辑与:有false则false。
* |逻辑或:有true则true。
* ^逻辑异或:相同为false,不同为true。
* !逻辑非:非false则true,非true则false。
    * 特点:偶数个不改变本身。

(逻辑运算符&&和&的区别)(掌握)
    * &&和&的区别?
        * a:最终结果一样。
        * b:&&具有短路效果。左边是false,右边不执行。
        *     &是无论左边是false还是true,右边都会执行
(位运算符的基本用法1)(了解)
位运算符有哪些
    * &,|,^,~ ,>>,>>>,<<
    * 位运算符的基本用法1
    
    * &,|,^,~ 的用法
    * &:有0则0
    * |:有1则1
    * ^:相同则0,不同则1
    * ~:按位取反     (取反得补码,再求原码就是结果) 如~6 -> -7
(位异或运算符的特点及面试题)(掌握)
    * ^的特点:一个数据对另一个数据位异或两次,该数本身不变。
(位运算符的基本用法2及面试题)(了解)
* >>,>>>,<<的用法:
    *  <<:左移    左边最高位丢弃,右边补齐0
    *  >>:右移    最高位是0,左边补齐0;最高为是1,左边补齐1
    *  >>>:无符号右移 无论最高位是0还是1,左边补齐0
    *  最有效率的算出2 * 8的结果 (2<<3)
(三元运算符的基本用法)(掌握)
* 三元运算符的格式
*         (关系表达式) ? 表达式1 : 表达式2;

   面试题:
1:
        byte b1=3,b2=4,b;
        b=b1+b2;//出错因为在JAVA虚拟机中默认是int类型转换,虚拟机不知道b1  ,b2 中的数值到底是多少,所有会抛出可能损失精度的错误;
                       //虚拟机会把  b1,b2  转换成 int类型在进行运算,两个int类型的数值相加结果任然是int类型,int类型 不能赋值给 byte类型
        b=3+4;   // 7   java编译器有常量优化机制
        哪句是编译失败的呢?为什么呢?

 2:
       byte  by = 130;有没有问题?有问题如何解决?结果是多少呢?  byte 的数值范围是 126~-127  130已经超出byte取值范围 运算是会砍掉前面的 三个8位
            结果会变成-126

 3:
        byte b = 10;
        b++;//这句  java虚拟机会做一个自动转换动作  相当于  b=(byte)(b+1)所以不会报错
        b = b + 1;//这句java虚拟机会把,b转换成int类型 相当于  int b + int 类型的1 然后赋值给Byte类型 int是4个字节  byte是1个字节 所有会抛出损失精度
        哪句是编译失败的呢?为什么呢?


4:常见的算术运算符有哪些?// + - * / % ++ -- += -= *= /=
  +运算符的作用有哪些?// 链接符号(当字符串在前面时 必须作为连接符来使用) 算数运算符  
  答:正号,字符串连接符号,算术运算符
  除法和取余的区别? //  / 除法是求商   % 求余数
  ++和--的使用规则?  a++ 先赋值在运算,  ++a  先运算  再赋值

5:常见的赋值运算符有哪些?
  +=运算的作用是什么? 等于自身去右边的数值,然后赋值给左边
  扩展的赋值运算符有什么特点?  系统会自动 隐式转换。。。

6:short s = 1; s = s + 1;有没有问题?如果有怎么解决?答:short + int ->int ,s是short ,int->short,系统会抛出,损失精度的错误。需要改成 s = (short)(s + 1)
   short s = 1; s += 1;有没有问题?如果有怎么解决?答:没有问题
    
7:常见的关系运算符有哪些?
答; 常见的关系运算符  ==  > < <= >= !=
  关系运算符的结果有什么特点?
答:关系运算符 输出的结果  是boolean类型 要么为 true 要么为 false

8.两个整数变量交换

        /*
        * 位异或运算符的特点

        * ^的特点:一个数据对另一个数据位异或两次,该数本身不变。
        */

        //System.out.println(5 ^ 10 ^ 10); //5
        //System.out.println(5 ^ 10 ^ 5); //10

        //两个整数变量的交换
    
        int x = 10;
        int y = 5;

        //需要第三方变量
        /*int temp;
        temp = x;
        x = y;
        y = temp;*/

        //不需要定义第三方变量,有弊端,有可能会超出int的取值范围
        /*x = x + y;                //10 + 5 = 15
        y = x - y;                //15 - 5 = 10
        x = x - y;                //15 - 10 = 5*/

        //不需要第三方变量,通过^来做
        x = x ^ y;                // 10 ^ 5 
        y = x ^ y;                // 10 ^ 5 ^ 5    y = 10
        x = x ^ y;                // 10 ^ 5 ^ 10  x = 5

 9 常见的逻辑运算符有哪些?
| || & && !  
  &和&&的区别是什么?& 结果为真还会计算第二个表达式, &&一个为true 结果就为true  共同点:两个逻辑运算符结果都是一样
  |和||的区别是什么?
答:结果一样.
| 只要一个为真结果就为真 两个都为false结果才为false 第一个结果为真还会判断第二个结果是否为真
|| 第一个结果为真,答案直接就为true 不会再判断第二个了
 
位运算符^的特点是什么? 异或两次同一个数,等于本身自己

posted @ 2018-10-22 19:05  fly_bk  阅读(506)  评论(0)    收藏  举报