首页 > 编程语言 >Java 数据类型

Java 数据类型

时间:2022-12-25 18:22:23浏览次数:60  
标签:0000 int 数据类型 二进制 Java byte 取值

数据在计算机内部是以二进制形式表示的,而数据有各种各样的类型(比如数值、文本、日期......),不同类型的数据具有不同的特点,如果按照统一的格式进行处理,会很不方便。

为此,高级语言引入了数据类型的概念,用于对数据进行归类,以便理解和操作。

数据类型分为基本数据类型和引用(对象)数据类型。其中,基本数据类型相当于化学中的基本元素,引用(对象)数据类型相当于元素组成的世间万物。

进制

十进制

十进制的位权为 10,如 123 的十进制 123,123 = 1 * (10^2) + 2 * (10^1) + 3 * (10^0)

二进制

二进制的位权为 2,如 4 的二进制 100,4 = 1 * (2^2) + 0 *(2^1)+ 0 *(2^0)

十进制转二进制

  1. 整数部分:除 2 取余,直到商小于 1 为止,再逆序排列。

image

  1. 小数部分:乘 2 取整,直到积的小数部分为零或者达到要求的精度,顺序排列。

  2. 最后将整数部分和小数部分合并即可。

/*

如:0.25 的二进制为 0.01

整数部分:
0 % 2 = 0 取余 0,小于 1,终止,逆序得 0

小数部分:
0.25 * 2 = 0.50  取整 0
0.50 * 2 = 1.0   取整 1,小数部分为 0,终止,顺序得 01

合并:
0.01

*/

二进制转十进制

使用位权计算。

/*

如:2.25 的二进制为 10.01

2.25 = 1 *(2^1)+ 0 *(2^0)+ 0 *(2^-1)+ 1 *(2^-2)

*/

Java 整数的二进制表示

bit 位:计算机中表示数据的最小单位,就是二进制的一位,可取 0 或 1(电路的开关)。

Java 使用最高位(左边第一位)表示符号位,符号位为 0 表示正数,为 1 表示负数。

  • 原码,用第一位表示符号,其余位表示值。
byte beVar1 = 1; // 原码:0000 0001
byte beVar2 = -1; // 原码:1000 0001
  • 反码,正数的反码等于原码,负数的反码是原码的符号位不变,其余位取反。
byte beVar1 = 1; // 反码:0000 0001
byte beVar2 = -1; // 反码:1111 1110
  • 补码,正数的补码等于原码,负数的补码是在反码的基础上加 1,补码取反码再加 1 又得到原码。
byte beVar1 = 1; // 补码:0000 0001
byte beVar2 = -1; // 补码:1111 1111

Java 小数的二进制表示

二进制中为表示小数,采用类似十进制的科学计数法,几乎所有的硬件和编程语言表示小数的二进制格式都是使用 IEEE 754 标准

32 位单精度二进制 = [1 个符号位] [8 个阶码位] [23 个尾数位]
64 位双精度二进制 = [1 个符号位] [11 个阶码位] [52 个尾数位]
小数 = [符号位] [指数部分] . [小数部分]
8 位阶码位移码偏移量 127,11 位阶码位移码偏移量 1023

/*
  如:2.25,二进制 10.01,先化为科学计数法 1.001 * (2^1)
  
  32 位单精度表示:
  
  符号位: 0
  阶码位:阶码 = 指数 + 阶码位移码偏移量 = 1 + 127 = 128,二进制 1000 0000
  尾数位:尾数 = 取小数点后 23 位,001 0000 0000 0000 0000 0000
  
  最终得:[0][1000 0000][001 0000 0000 0000 0000 0000]
  
  同理可得 -2.25 的二进制:[1][1000 0000][001 0000 0000 0000 0000 0000]
  
 */
 
System.out.println(Integer.toBinaryString(Float.floatToIntBits(2.25F)));
System.out.println(Integer.toBinaryString(Float.floatToIntBits(-2.25F)));

基本数据类型

在 Java 中,有如下的基本数据类型。

byte 字节型

8 bit 位,占 1 个字节,取值范围 -2^7 ~ 2^7 - 1,默认值为 0。

byte beVar = 100;

short 短整型

16 bit 位,占 2 个字节,取值范围 -2^15 ~ 2^15 - 1,默认值为 0。

short stVar = 200;

int 整型

32 bit 位,占 4 个字节,取值范围 -2^31 ~ 2^31 - 1,默认值为 0,整数默认类型

int itVar = 300;

long 长整型

64 bit 位,占 8 个字节,取值范围 -2^63 ~ 2^63 - 1,默认值为 0。

long lgVar1 = 400;  // 在 int 型的取值范围内时可用,不建议,最好加上 L
long lgVar2 = 400L;

float 单精度浮点数

32 bit 位,占 4 个字节,默认值为 0.0F,不能用于表示精确值,如货币。

float ftVar = 3.14F; // 浮点数默认类型是 double,必须加 F

double 双精度浮点数

64 bit 位,占 8 个字节,默认值为 0.0D浮点数默认类型,不能用于表示精确值,如货币。

double deVar1 = 3.14;
double deVar2 = 3.14E2; // 314.0
double deVar3 = 3.14E-2; // 0.0314

char 字符型

16 bit 位,可以是中文字符,使用单引号括起来,本质上是一个固定占用 2 字节的无符号正整数,对应一个 Unicode 编号,用于表示 Unicode 编号对应的字符,默认值为空字符'\u0000'

由于固定占用两个字节,char 只能表示 Unicode 编号在 65536 以内的字符,而不能表示超出范围的字符,超出范围的字符将使用两个 char 表示。

char crVar1 = '光';
char crVar2 = 97; // 可以存储数字,因为 char 的本质就是无符号正整数,对应 Unicode 编号

boolean 布尔型

布尔型只有两个取值:truefalse,默认值为 false

boolean flag = true;

基本数据类型转换

在 Java 中,声明变量时需要指定数据类型,JVM 会根据数据类型申请相应的内存空间,分配的空间只能存储该类型的数据。如果赋值的数据类型和声明的数据类型不一致,则需要进行数据类型转换。

布尔型不参与数据类型转换。

自动类型转换

小取值范围类型往大范围类型转自动转。

byte => short => int => long => float => double

char => int

long 的位数比 float 大,但由于 float 采用科学计数法,取值范围实际比 long 大。

byte a = 10; 
short b = a;
int c = b;
long d = c;

强制类型转换

大范围往小范围转要强转。强转可能导致数据溢出、精度丢失。

float ftVar = (float)3.14159; // 浮点数字面量默认是 double 类型

隐式类型转换

/*
 1、多类型混合运算时,会自动转成容量最大的数据类型,再进行计算,并返回相应类型的结果
   对于整数来说,如果没有 long 型,则提升至 int 型(不管有没有 int 型变量参与)

 2、在取值范围内时,整数字面量(int 型)赋值给 byte、short、char 时会自动转换
 
 3、在取值范围内时,常量和字面量的运算结果赋值给 byte、short、char 时会自动转换

 4、赋值运算(+=、-=、...)会自动进行强转
 
 5、`char` 的运算是按 Unicode 编号进行的,在进行算术运算时会转换为 `int` 类型
 */

byte a = 100; 
// a + 1 运算提升至 int 型,值在 byte 的取值范围内,但由于是变量和字面量运算,编译时不会优化,需要手动强转
byte b = a + 1; 

final byte c = 100;
// c + 1 运算提升至 int 型,值在 byte 的取值范围内,且是常量和字面量运算,编译时会优化,不需要手动强转
byte d = c + 1; 

// 100 + 1 运算提升至 int 型,值在 byte 的取值范围内,且是字面量和字面量运算,编译时会优化,不需要手动强转
byte f = 100 + 1; 

引用(对象)数据类型

除基本数据类型以外的,都是引用(对象)数据类型,如:String、数组...,引用类型的默认值是 null

引用数据类型由基本数据类型、其他引用数据类型组成,可以理解为自定义数据类型。

标签:0000,int,数据类型,二进制,Java,byte,取值
From: https://www.cnblogs.com/knhap/p/17004348.html

相关文章

  • javaweb基本概念
        web应用程序编写完毕后,若要提供给外界访问:需要一个服务器统一管理。       ......
  • GPS数据类型(ROS) Label: Research
    转载自ROS传感器之GPS简介一.传感器分类在自动驾驶或者机器人领域,传感器的使用按照测量对象划分,可分为两大类,一类是测量自身状态,另一类测量环境状态。前者主要包含GPS,IM......
  • Java8 Optional为空处理
    packagecom.example.cesium.utils;importlombok.AllArgsConstructor;importlombok.Data;importlombok.NoArgsConstructor;importlombok.ToString;importjava......
  • day02-Java入门
    本章包含Java是什么、Java程序初体验、Java的前世今生、Java为什么这么火、JRE和JDK。Java是什么Java是一门高级的程序设计语言!Java程序初体验下载和安装JDK下......
  • Java编程思想10
    第十五章:泛型我们希望达到的目的是编写更通用的代码,要使代码能够应用于“某种不具体的类型”,而不是一个具体的接口或类。简单泛型​有许多原因促进了泛型的出现,而最引人......
  • 关于 java: 错误: 无效的源发行版
    工具:IDEA、Maven问题:在更换JDK后,原先的项目运行时出现java:错误:无效的源发行版:16解决方案:1、打开项目结构,更新项目JDK和项目语言级别2、更新Maven配......
  • 教你用JavaScript实现乘法游戏
    案例介绍欢迎来的我的小院,我是霍大侠,恭喜你今天又要进步一点点了!我们来用JavaScript编程实战案例,做一个乘法积分游戏。乘法游戏主要通过用户输入的数值和程序计算的数......
  • 5个JavaScript的字符串处理库
    英文| ​​https://blog.bitsrc.io/5-string-manipulation-libraries-for-javascript-5de27e48ee62​​​使用字符串可能是一项繁琐的任务,因为有许多不同的用例。例如,将字......
  • JavaScript中的简单排序算法
    英文| https://medium.com/javascript-in-plain-english/simple-sorting-algorithms-in-javascript-57d512ceaf5d翻译|web前端开发排序是程序员处理数据处理时最常见的......
  • 7种你应该知道的JavaScript常见的错误
    英文| ​​https://blog.bitsrc.io/types-of-native-errors-in-javascript-you-must-know-b8238d40e492​​​从浏览器的控制台到运行Node.js的计算机终端,我们到处都会看......