黑马程序员 Java基础_2 数据类型、运算符及应用

为什么要单独总结这两个知识点,个人感觉,无论学什么语言,这两个知识点都是基础中的基础,只要把这两个搞清楚,才能更好的学习编程(好吧,其实真正原因是被跟这些相关的bug给虐了)。

一、数据类型

1、整型数据

byte、short、int、long

其中byte有8个位,short有16位,int有32位,long是64位

其中byte的表示范围:-128-127

这里只指出byte的范围,因为把byte搞懂了,其他都一样了。

整型数据的特定是有符号位和数据位组成,符号位为最高位,0代表正数,1代表负数。而数字的表示是由数字的补码来表示,正数的补码等于原码,负数的补码是负数绝对值原码全部取反再加1,例如-127,它绝对值的原码为01111111,取反就为10000000,补码就为10000001,。

这里不禁想一个问题,-128的补码是多少?因为-128的绝对值超出了byte的范围,根据笔者验证,为10000000。这个值就是byte里面最特殊的值。

2、浮点数据

float,double

3、字符数据

char ,它要有'  '括起来,如char a=‘b’;

4、布尔数据

boolean,它只有两个值true或者false

5、初始化默认值

null

还有一个数据转换的问题。具体来讲就是小范围向大范围转,比如char+int,byte向int转再跟int相加,结果也为int。但也有例外的就是强转,就是通过在数据前面加上(数据类型),就可以从大范围向小范围逆转。如 (char)('a‘+1),结果为b。

二、运算符

1、算术运算符

+ 加号 -减号 *乘号

/除号 %取模 也就是求余数

++ 自增号 如果放在数据前,就先加1再运算 ,如果放在数据后,就先运算再+1。

- - 自减号 如果放在数据前,就先减1在运算,如果放在数据后,就先运算再减1。

2、赋值运算符

赋值运算符的作用是将一个值赋予一个变量,运算顺序从右到左。

= 赋值

+=加法赋值 例如 a+=b就等于a=a+b。

-=减法赋值 例如a-=b就等于a=a-b。

*=乘法赋值 例如a*=b就等于a=a*b

/=除法赋值 例如a/=b就等于a=a/b

%=模赋值

3、关系运算符

关系运算符的作用是比较两边的运算数,结果是boolean

==等于 5==6 false

!=不等于 5!=6 true

<小于 5<6 true

>大于 5>6 false

<=小于等于 5<=6 true

>=大于等于 5>=6 falese

4、逻辑运算符

逻辑运算符是对boolean类型的表达式进行运算,结果也是boolean类型

& 与 false&true false

| 或false|true true

!非 !true false

&& 逻辑与 false&&true false

|| 逻辑或 false||true true

这里不得不提一下&&和&的区别,&&是短路判断,如果前面有一个表达式为false,后面就不执行直接返回false,而&不管什么情况都会把所有表达式执行完。

并且&也可以作为位运算符参与二进制运算。||和|的关系也是一样。

5、位运算符

~按位取反,~110变成001

&按位与,110&010等于010

|按位或,110|010等于110

   ^按位异或,110^010等于100


  6、移位运算符

<<左移运算符

数据的所有位数向左移动,用零来补充空位,保留符号位。

>>右移运算符

数据的所有位数向移动,用符号位来补充空位

>>>无符号右移运算符

数据的所有位向右移动,用零来补充空位。

  

以下有个关于进制转化的例子,是毕老师查表法的程序,这里就引用一下。

import java.util.*;  
class Trans  
{  
    public static int scan()  
    {  
        Scanner in = new Scanner(System.in);  
        System.out.print("请输入十进制数字:");  
        int num = in.nextInt();  
        return num;  
    }  
  
    public static void trans(int num,int base,int offset)  
    {  
        if(num ==0)  
        {  
            System.out.println("\n转换后的数为:" + 0);  
            return ;  
        }  
        StringBuffer sa = new StringBuffer();  
        //这里定义16进制内都可以用到的数组
        char[] ch =  {  '0','1','2','3',  
                        '4','5','6','7',  
                        '8','9','A','B',  
                        'C','D','E','F'};  
        char[] arr = new char[32];   
        int pos = arr.length;  
        while(num!=0)  
        {  
            int temp = num & base;  
            arr[--pos] = ch[temp];  
            num >>>=offset;  
        }  
  
        for(int i=pos;i<arr.length;i++)  
        {  
            sa.append(arr[i]);  
        }  
        System.out.println("后的数为:" + sa);  
    }  
  
    //转换为二进制  
    public static void toBin(int num)  
    {  
        System.out.print("转换成二进制");  
        trans(num,1,1);  
    }  
  
    //转换为八进制  
    public static void toBa(int num)  
    {  
        System.out.print("转换成八进制");  
        trans(num,7,3);  
    }  
      
  
    //转换为十六进制  
    public static void toHex(int num)  
    {  
        System.out.print("转换成十六进制");  
        trans(num,15,4);  
    }  
  
    public static void main(String [] args)  
    {  
        int x = 0;  
        x = scan();  
        toBin(x);  
        toBa(x);  
        toHex(x);  
    }  
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值