不知道取啥标题=-=

 

今天的学习内容,老师就给我们上了一份大餐,计算机的 进制 ,当然我们学习肯定不会像百度百科那样的一点点的详细的去了解。毕竟我们学习的是java语言,所以根据java的内容来学二进制的。(内容与标题不太相同见谅啊QAQ,我也不知道该取啥标题

基本数据类型:

数据类型关键字内存占用取值范围
字节型 byte 1个字节 -128 至 127
短整型 short 2个字节 -32768 至 32767
整型 int(默认) 4个字节 -2^31^ 至 2^31^-1
长整型 long 8个字节 -2^63^ 至 2^63^-1 19位数字
单精度浮点数 float 4个字节 1.4013E-45 至 3.4028E+38
双精度浮点数 double(默认) 8个字节 4.9E-324 至 1.7977E+308
字符型 char 2个字节 0 至 2^16^-1
布尔类型 boolean 1个字节 true,false

Java中的默认类型:整数类型是int 、浮点类型是double

e+38表示是乘以10的38次方,同样,e-45表示乘以10的负45次方。

变量在定义(使用代码展示):

public static void main(String[] args) {

        byte b = (byte) 128;
        System.out.println(b);
        
        char char1 = 'a';
        System.out.println(char1);
        
        short short1 = 21292;
        System.out.println(short1);
        
        float float1 = 212212.3123213f;
        System.out.println(float1);
        
        long long1 = 1213312l;
        System.out.println(long1);
        
        double double1 = 121.3112;
        System.out.println(double1);
        
        boolean boo = true;
        System.out.println(boo);
        
        int int1 = 1;
        System.out.println(int1);
        
        int int2 = 1, int3 = 2;
        System.out.println(int2 + "" + int3);
        
        int i, j;
        i = 2;
        j = 3;
        System.out.println(i + "" + j);

    }

声明变量的注意点:

 

 

 数据类型之间的转换:

类型转换,分为自动转换,强制转换。

自动转换: 根据数据类型的范围来觉定:byte-->short,char-->int-->long-->float-->double-->String

就如byte可以自动转换为int类型,反之int类型不能自动转换为byte类型。

强制转换:

public static void main(String[] args) {
        /*
         * 强制转换 案例
         * 
         */
        int a = 1;
        char b = (char) a;  /*
                             * ==>这里因为a的范围比b的范围要大, 所以编译器不确定变量啊的大小,
                             * 为了避免a的值超过char 范围所以需要进行强转
                             */
        double d = 213.21312;
        float f = (float) d; /* 同样这里的原理也是一样的 */

        double d1 = 21231.121;
        int i = (int) d1; /* 当然也适用于浮点型转化为整型 */
        
        /* 
         * 不过需要注意的是当自动转换时,变量不会因为 转换而丢失精度,
         * 例如:int a =2 转换为 double d = a时。d的值会为2.0。
         * 强转时,变量会因为强转而丢失精度
         * 例如:double d = 3.121322,转换为int a = (int)d; a的值为3,就等于丢失了小数部分
         * */
    }

插入一个小知识点:Ascll编码 ,下面有一个例子:

    public static void main(String[] args) {
        /* Ascll编码表案例 */
        char a = 'a';
        int i = 1; 
        System.out.println(a + i);   //输出98
        
        /* 我们知道  char类型能自动转换为int类型从输出值为98可以反过来算出 变量a为97,
         *为什么为97,因为在Ascll表中a的Ascll值为97。
         * */
        
    }

关于类型的强转,下面还有一个细节的知识点:

下面的程序有问题吗?

public static void main(String[] args){
 short s = 1;
 s+=1;
 System.out.println(s);
}

分析: s += 1 逻辑上看作是s = s + 1 计算结果被提升为int类型,再向short类型赋值时发生错误,因为不能将取值范围大的类型赋值到取值范围小的类型。但是,s=s+1进行两次运算+= 是一个运算符,只运算一次,并带有强制转换的特点,也就是说s += 1 就是s = (short)(s + 1),因此程序没有问题编译通过,运行结果是2。

因此,这里要说一点的是,赋值运算符默认进行了强制类型转换。

/*   ========================================================================   */

其实还学了运算符,但对于我的用处不怎么大所以就不撰写了。无非是一些加减乘除,我就直接扣两张图放着。

运算符:

算数运算符:

算数运算符作用例子(a=11,b=2)
+ 加法运算,字符串连接运算 13=a+b;
- 减法运算 9=a-b;
* 乘法运算 22=a*b;
/ 除法运算,取整除结果 5=a/b;
% 取模运算,两个数字相除取余数 1=a%b;
++ 自增: 操作数的值增加1 a++或++a,a的值都为13
-- 自减: 操作数的值减少1 a--或--a,a的值都为10

赋值运算符:

符号作用说明
= 赋值 a=10,将10赋值给变量a
+= 加后赋值 a+=b,将a+b的值给a
-= 减后赋值 a-=b,将a-b的值给a
*= 乘后赋值 a*=b,将a×b的值给a
/= 除后赋值 a/=b,将a÷b的商给a
%= 取余后赋值 a%=b,将a÷b的余数给a

关系运算符:

符号说明
== a==b,判断a和b的值是否相等,成立为true,不成立为false
> a>b,判断a是否大于b,成立为true,不成立为false
>= a>=b,判断a是否大于或者等于b,成立为true,不成立为false
< a<b,判断a是否小于b,成立为true,不成立为false
<= a<=b,判断a是否小于或者等于b,成立为true,不成立为false
!= a!=b,判断a和b的值是否不相等,成立为true,不成立为false

逻辑运算符:

符号作用说明
& 逻辑与 a&b,a和b都是true,结果为true,否则为false
| 逻辑或 a|b,a和b都是false,结果为false,否则为true
^ 逻辑异或 a^b,a和b结果不同为true,相同为false
逻辑非 !a,结果和a的结果正好相反
&& 短路与 1. 两边都是true,结果是true 2. 一边是false,结果是false 短路与特点:符号左边是false,右边不再运算
|| 短路或 1. 两边都是false,结果是false 2. 一边是true,结果是true 短路或特点: 符号左边是true,右边不再运算
取反 1. ! true 结果是false 2. ! false结果是true

三元运算符:

            数据类型 变量名 = 布尔类型表达式?结果1:结果2

           格式:int a = 3>4? 12312 :123213;

位运算符:

有个帖子写的还不错:https://cloud.tencent.com/developer/article/1528990

 

二进制: 由 0和1组成,逢二进一    例如   1的二进制为 0000 0001 ;  2的二进制为 0000 0010;

2进制转换为10进制:  十进制整数转换成二进制采用“除2倒取余”,十进制小数转换成二进制小数采用“乘2取整”。

列如 :6转换为2进制, 6除以2 =3 余0  接着 3除以2 = 1 余 1 即为 110   所以6的二进制为 0000 0110;

二进制转十进制采用按权相加法:https://blog.csdn.net/yuanxiang01/article/details/82503568

位运算:位运算符指的是两个数之间的位运算,运算过程中都转换为字节类型参与运算。比如:数字3转换为字节数为0000 0011。

符号作用说明
& 按位与 两数同位对比,有0则为0
| 按位或 两数同位对比,有1则为1
^ 按位异或 两数同位对比,不同为1,相同为0
~ 按位取反 针对一个数,操作数的每一位都取反
<< 按位左移 针对一个数,操作数的每位向左移动指定位数,最高位丢弃,尾部空位补0(相当于乘以2的n次方)
>> 按位右移 针对一个数,操作数的每位向右移动指定位数,头部空位补符号位数,移除部分丢弃
>>> 无符号右移 针对一个数,操作数的每位向右移动指定位数,无论符号数头部都补0,移除部分丢弃

如下有代码案列:

    public static void main(String[] args) {
        /*
         * 位运算符案列
         */

        System.out.println(2 & 3);
        /*                           按位与
         * 2的二进制数为 0000 0010 ;2的二进制为0000 0011 两数同位对比有0则0,
         * 所以值为 0000 0010; 所以输出的值为2。
         */
        System.out.println(2 | 3);
        /*                           按位或和与恰巧反过来
         * 2的二进制数为 0000 0010 ;2的二进制为0000 0011 两数同位对比有1则1,
         * 所以值为 0000 0011; 所以输出的值为3。
         */
        System.out.println(2^3);
        /*                           按位异或
         * 2的二进制数为 0000 0010 ;2的二进制为0000 0011 两数同位对比不同为1,相同为0,
         * 所以值为 0000 0001; 所以输出的值为1。
         */
       System.out.println(~2);
          /*                           按位取反
         * 2的二进制数为 0000 0010 ; 操作数的每一位都进行取反,
         * 所以值为 1111 1101; 所以输出的值为-3。
         */
       System.out.println(2<<3);
         /*                           按位左移
         * 2的二进制数为 0000 0010   相当于把2的二进制每位左移3位,尾部用0补齐
         * 所以值为 0001 0000; 所以输出的值为16。
         */
       System.out.println(-16>>3);
        /*                           按位右移
         * 2的二进制数为0001 0000   相当于把2的二进制每位右移3位,头部用0补齐移出部分丢弃
         * 所以值为 0000 0010; 所以输出的值为2。
         */
       System.out.println(15>>>2);
       /*                           无符号右移
         * 无符号右移运算符和右移运算符的主要区别在于负数的计算,因为无符号右移是高位补0,移多少位补多少个0。
         * 15的二进制位是0000 1111 , 右移2位0000 0011,结果为3。
         */
       
    }

 同样正在学习的你下面的题怎么回答:

1. 简答题:简述Java数据类型有哪些

2. 简答题:简述Java变量定义及初始化赋值时要注意的问题。

3. 简答题:简述下面的程序是否有问题,指出问题位置并说明。

1 public static void main(String[] args){

2    byte b1=134;

3    byte b2=21;

4 byte b3=1 + 2;

5    byte b4=b1 + b2;

6    System.out.println(b3);

7    System.out.println(b4);

8 }

4. 编程题:下列程序执行结果为?

public static void main(String[] args){

  int x=10;

  double y=20.2;

  long z=10;

  String str=""+x+y*z;

  System.out.println("str= " + str);

   }

5. 简答题:下面程序执行结果为。

public static void main(String[] args){

int i=1;

int j=i++;

int k=i + ++i * j--;

System.out.println(i=+i +“,j=+j + ,k=+k);

   }

6. 简述题:简述&与&&的区别。

7. 编程题:使用最有效的方式计算3<< 4的结果。

8. 编程题:两个变量 int a = 1; int b = 2;如何将两个变量的值互换。

 

个人学习,内容简略

posted @ 2020-07-20 20:51  一生的风景  阅读(260)  评论(0编辑  收藏  举报