zoukankan      html  css  js  c++  java
  • java 进制 、数据类型和码表、转义字符

     

     

     

    类型名称

    字节空间

    范围

    整数型

    byte

    1

    -27到27-1   或者   -128到127

     

    short

    2

    -215到215-1

     

    int

    4

    -231到231-1

     

    long

    8

    -263到263-1

    浮点型

    float

    4

    单精度,对小数部分的精度要求不高

     

    double

    8

    双精度,精确的小数部分并操作值很大时

    字符

    char

    2

    0到65535 因为少一个符号位所以比int大两倍

    布尔

    boolean

    1

    真true  假false

    float和double有个问题 在我们大多的小数而言转换位二进制是无限位的,缺少精度。在后面的api java会解决、

    如果右边给出初始值而且是正数,那么默认是int数字类型 比如 long l=1651651655;这个时候是错的,范围是超出的,但是如果你不是默认数字类型,加上一个标记就可以了

    long l=16165165155L;

    浮点行默认是double类型

    如果定义一个单精度的数据类型的变量初始值加上一个F: float=1.2F;

     char 是有且只有一个字符 

    char a=''; //没有内容会报错
    char a1=' '; //可以是空格
    char a2='av'; //多于一个字符
    char a3='好'; //正确
    char a4='好看'; //错误

     变量

    java中变量分为全局变量和局部变量

    局部变量: 方法内的变量

    全部变量: static int i;作用域是整个类 而且会有默认初始值

     浮点数的字面值是double类型

    float f = 3.0;//错的。右面3.0默认是double类型,不能直接给float类型赋值,占用4字节放不开double

     字面值后缀LFD

    long a=999999999999L;//对的,右面的整数默认值是int类型,加了L扩大了数据范围

    float b = 3.0F;//右面3.0字面值是double,加了F就变成了float

    double d = 3D; //右面的3字面值是int,加了D变成了double

    进制前缀

    0b    -2进制

    0x    -16进制 0x0011  0x7781

    0     -8进制  027

    u    -char类型,16进制   u0011默认值是u0000

     

    二进制:0b111 代表的是7

    八进制:010 代表的是8

    16进制:0xa代表的是10

    测试的话可以用下面

    package com.tedu.basic;
    
    
    //测试取值范围
    public class Test1_Scope {
    	public static void main(String[] args) {
    		byte bmax = Byte.MAX_VALUE;
    		byte bmin = Byte.MIN_VALUE;
    		
    		//打印变量的值快捷键alt+/
    		System.out.println(bmax);//127
    		System.out.println(bmin);//-128
    		
    		short smax = Short.MAX_VALUE;
    		short smin = Short.MIN_VALUE;
    		System.out.println(smax);//32767
    		System.out.println(smin);//-32768
    		
    		//int  Integer
    		int imax = Integer.MAX_VALUE;
    		int imin = Integer.MIN_VALUE;
    		System.out.println(imax);//2147483647
    		System.out.println(imin);//-2147483648
    		
    		//long Long
    		long lmax = Long.MAX_VALUE;
    		long lmin = Long.MIN_VALUE;
    		System.out.println(lmax);//9223372036854775807
    		System.out.println(lmin);//9223372036854775808
    		
    		//float   Float
    		float fmax = Float.MAX_VALUE;
    		float fmin = Float.MIN_VALUE;
    		System.out.println(fmax);//3.4028235E38
    		System.out.println(fmin);//1.4E-45 
    		
    		//double  Double
    		double dmax = Double.MAX_VALUE;
    		double dmin = Double.MIN_VALUE;
    		System.out.println(dmax);//1.7976931348623157E308
    		System.out.println(dmin);//4.9E-324
    		
    		System.out.println();
    		
    		
    		char  c = 'h';//""  字符串  ''字符
    		char c2 = '0';
    		char c3 = '我';//char可以存一个汉字
    		char c4 = 200;
    		//字符类型,最终的输出结果就是一个字符
    		//能够把98换算成字符b,
    		//因为char类型底层会查ascii码表
    		//ascii码表里规定了0-127对应的字符,
    		//ascii码表里没有的数字都按?字符来处理
    		System.out.println(c4);//?
    	}
    	
    }
    

    进制转化

    1.1 小到大/隐式转换

     

     float和double是可以互相转换的,但是转换后的值会与原来的值不一样。 

        float f=1.212161656f;
            double d=1.212161656d;
            double s=f;//float转double
            float a=(float)d;//double转float  强制转换
            System.out.println(f);//1.2121617
            System.out.println(d);//1.212161656
            System.out.println(s);//1.212161660194397 float转double自己往后面补东西
            System.out.println(a);//1.2121617  double转float 会切掉多的部分

    long l = 800;

    float f = l;//右侧的是long类型小类型,给左侧的float大类型可以直接赋值

     short s='内' 字符是0-65535 short是-215到215-1`

    char c=10;//默认进行类型检查,会把数字转成对相应的字符

    byte b=128;//超出范围报错;

    byte b=128-1;//不报错 如果等号的右边参与运算的全部都是常量,那么java在编译时期就会进行优化,优化的结果就是直接计算等式,最后结果在进行赋值

    double s=10;char c=s;  //转化的值可能是负数那么就不在char范围内就会报错 你虽然看到的是他赋值了10是整数,但是在编译的时候编译器认为s有可能是负数,所以就报错了。

    byte b=(byte)128; 结果是-128  解释如下

    任何数据在底层是二进制的补码形式存储的

    int 128 在底层的存储是00000000 00000000 00000000 10000000 正数的补码就是原码

    强制类型后 变成bype类型 10000000(补码) 这个时候第一位是1那么这个时候补码是负数

    转变位反码:11111111

    再转变位原码 10000000   相当于-0(代表的是当前数据类型范围的最小值)

    详情请看我写的原码,反码,补码的解析

    https://www.cnblogs.com/xuwangqi/p/11023132.html

    1.2 大到小/显示转换

    需要强制类型转换

    int a = 10;//大

    //右侧的a本来是int类型,被强转成了byte类型和左面保持了一致

    byte b = (byte)a;

    1.3 浮点数转成整数,小数直接舍弃

    不管0.1还是0.9全都舍弃。

    float f = 3.9f;

    int a = (int)f;//float是大类型,需要强转

    System.out.println(a);//3

    1.4 整数转成浮点型

    表示的可能不准确 就是科学计数法

     

     编码--把文字转换位数字的过程 转换规则是--码表

     无论那张码表都默认兼容 ISO8859-1 (西欧码表) 就是前256的字符都是占1个字节

    GB2312(简体中文 2个字节 ) BIG5(繁体中文 2个字节) GBK(国标表 2个字节)

    Unicode编码体系(u8(三个字节)、u16(两个字节)、u32等。

    .java文件进行存储时,默认采用的时u8进行编码的,.class在内存时用的是u16进行编码

    char c=‘中’

    当上诉代码中的字符存储在.java文件中时默认按u8进行编码,对.java文件进行编译生成.class文件加载到内存中进行执行.此时这个代码中字符默认按u16进行编码。内存执行完成之后要把内存的字节转成字符输出到程序中,如果指定就按指定的来,如果没有指定编码就按默认系统平台码来进行编码,默认系统平台码(window中文版  gbk ,linux u8)

  • 相关阅读:
    面向对象的继承关系体现在数据结构上时,如何表示
    codeforces 584C Marina and Vasya
    codeforces 602A Two Bases
    LA 4329 PingPong
    codeforces 584B Kolya and Tanya
    codeforces 584A Olesya and Rodion
    codeforces 583B Robot's Task
    codeforces 583A Asphalting Roads
    codeforces 581C Developing Skills
    codeforces 581A Vasya the Hipster
  • 原文地址:https://www.cnblogs.com/xuwangqi/p/11021844.html
Copyright © 2011-2022 走看看