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)

  • 相关阅读:
    C语言变量名的命名规则
    C++中关于文字编码的问题
    位运算
    Dictionary C#
    C# 中List 用法
    pDC,双缓冲 加载bitmap一点实践
    MyEclipse开发调试JSP,Servlet,JavaBean,JSF,Structs etc
    sqlserver 2005 一些操作
    利用System.EventHandler来实现两个窗体间的事件调用
    webconfig
  • 原文地址:https://www.cnblogs.com/xuwangqi/p/11021844.html
Copyright © 2011-2022 走看看