java--基本数据类型,运算符

char占几个字节?

char在设计之初的时候被用来存储字符,两个字节可以存储2^16(65536)种,这个数量符合大多数国家的语言字符个数,于是Java团队使用unicode作为编码标准,一个char作为2个字节来存储,unicode只是一个标准,具体的实现还是有如:UTF-8或UTF-16等编码。java中char占几个字节,取决于使用的编码集,如果使用ASCII编码集,则占一个字节;如果使用UTF-8编码集?
utf-8为了节省资源,采用变长编码,编码长度从1个字节到6个字节不等,英文字母占一个字节,汉字占3个字节
GBK编码表由我国发明,计算机不能在每次都只读一个字节(00000000,8位表示一个字节),要先看看第一位是不是为0,要是为0 的话,就当作ASCII码来读入一个字节,不然的话就读入两个字节(汉子太多一个字节存不下,读入两个字节表示汉字就查GBK)

boolean占几个字节?

在《Java虚拟机规范》一书中的描述:“虽然定义了boolean这种数据类型,但是只对它提供了非常有限的支持。在Java虚拟机中没有任何供boolean值专用的字节码指令,Java语言表达式所操作的boolean值,在编译之后都使用Java虚拟机中的int数据类型来代替,而boolean数组将会被编码成Java虚拟机的byte数组,每个元素boolean元素占8位”。

JVM规范指出boolean当做int处理,4字节,boolean数组当做byte数组处理,1个字节

  //8种数据类型
        //整数型,3种表现形式:十进制、八进制(以0开头0123=83;-0123=-83)、16进制(以0X开头0Xb01e=456086)
        //整形根据所占内存大小不同,分byte、short、int、long
        //byte(8位,-128~127)、
        // short(16位,-32768~32767)、
        // int(32位,)、
        // long(64位,)L
        byte b=124;

        //浮点型(默认为double)F(float不加F会报错)/D,两种:float(单精度浮点型,32位)、double(双精度浮点型,64位)
        float f1=13.1F;
        double d1=120.1D;
        double d2=120.1;

        //ASCII码由一个字节中的7位(bit)表示,范围是0x00 - 0x7F 共128个字符
        //为了把全世界人民所有的所有的文字符号都统一进行编码,于是制定了UNICODE标准字符集,UNICODE 使用2个字节表示一个字符
        //UNICODE 的范围是 0x0000 - 0xFFFF 共6万多个字符,其中汉字占用4万多
        //字符型char(16位,单引号标识,'s',"s"表示字符串)
        char a='a';
        //字符a在码表中值位97,java可以把字符当做整数对待
        char x=97;
        System.out.println(a+1);//98
        System.out.println((char)(a+1));//b
        System.out.println("UNICODE码第23045位:"+(char)23045);//UNICODE码第23045位:娅
        //转义字符,以\开头
        /**
         * \ddd:
         * \dxxxx
         * \'
         * \\
         * \r回车
         * \n换行
         * \b退格
         */

        //布尔型

整数表示

//System.out.println()命令就是默认以十进制进行打印输出的
        byte a=127;
        System.out.println(a);
        //二进制:Ob开头
        int a1=0b111;
        System.out.println(a1);//输出7
        //八进制:0开头
        int a2=0b100;
        System.out.println(a2);//输出4
        //十六进制:0x或0X开头
        int a3=0xff;
        System.out.println(a3);//输出255

        //32位二进制表示5
        int a4=0b00000000000000000000000000000101;
        System.out.println(a4);//输出5
        //32位二进制表示5的反码
        int a5=0b11111111111111111111111111111010;
        System.out.println(a5);//输出6
        //32位二进制表示-5,即32位二进制表示5的反码+1,即补码
        int a6=0b11111111111111111111111111111010+0b1;
        System.out.println(a6);//输出-5

移位符

// << 左移位,不分正负数,低位补0,相当于 乘2
        System.out.println(16<<2);//输出64
        System.out.println(-16<<2);//输出-64
        // >> 右移位,正数高位补0,负数高位补1,相当于 除2
        System.out.println(16>>2);//输出4
        System.out.println(16>>5);//输出0
        System.out.println(-16>>2);//输出-4
        System.out.println(-16>>5);//输出-1

        // >>> 无符号右移/逻辑右移,不分正负数高位补0
        System.out.println(16>>>2);//输出4
        System.out.println(-16>>>2);//输出1073741820

逻辑运算符: &-与、|-或、!-非、^-异或

//逻辑运算符: &-与、|-或、!-非、^-异或
        //&左右两边都执行
        int i = 0;
        if (false & (i++) > 0) {
        }else{
        }
        if(i > 0){
            System.out.println("单目&,两边都执行,i= "+i);//单目&,两边都执行,i= 1
        }else{
            System.out.println("单目&,只左边执行,i= "+i);
        }

        //|左右两边都执行
        i = 0;
        if(true | (i++) > 0){
        }else{
        }
        if(i > 0){
            System.out.println("单目|,两边都执行,i= "+i);//单目|,两边都执行,i= 1
        }else{
            System.out.println("单目|,只左边执行,i= "+i);
        }

        //^左右两边是相同的boolean值, 那么就是false, 不相同才是true
        System.out.println("true^true========="+(true^true));//false
        System.out.println("false^false========="+(false^false));//false
        System.out.println("true^false========="+(true^false));//false

        //&& 一旦判断到左边是false之后, 右边就不参与运算了
        //||一旦判断左边是true之后, 右边就不参与运算了
/**
     * 字符转字节数组
     * @param c
     * @return
     */
    public static byte[] char2byte(char c){
        byte[] b = new byte[2];
        //0xFF00  计算机表示 1111 1111 0000 0000 &表示同为1则为1   >>8 右移8位 相当于去掉0000 0000,只保留前面的数值
        b[0] = (byte)((c & 0xFF00) >> 8);
        //0xFF  计算机表示  1111 1111  &表示同为1则为1 前面位数不够用0补
        b[1] = (byte)(c & 0xFF);
        return b;
    }

    /**
     * 字节数组转字符
     * @param b
     * @return
     */
    public static char byte2char(byte[] b){
        //(b[0] & 0xFF << 8) 第一个字节
        //(b[1] & 0xFF)) 第二个字节
        char c = (char)((b[0] & 0xFF << 8) | (b[1] & 0xFF));
        return c;
    }

运算符 i+= ,i=+,i++,++i

        int i=1;
        System.out.println(i+=2);//3,先运算赋值再执行其他语句
        int i1=1;
        System.out.println(i1=+2);//2,先执行其他语句再运算赋值
        int i2=1;
        System.out.println(i2++);//1,先执行其他语句再运算赋值
        int i3=1;
        System.out.println(++i3);//2,先运算赋值再执行其他语句
发布了296 篇原创文章 · 获赞 70 · 访问量 55万+

猜你喜欢

转载自blog.csdn.net/feicongcong/article/details/103715259