Java 数据类型 类型转换 运算符

常用的进制
二进制
八进制
十进制
十六进制
进制之间是可以互相转换的。

进制如何转换 以二进制和十进制进制为例
10 -> 2
不停的除以2直 至结果是1 然后从1开始 从下至上 拼接余数
2 -> 10
1010 -> 10 02^0 + 12^1 + 02^2 + 12^3 = 10
1110 -> 14 02^0 + 12^1 + 12^2 + 12^3 = 14
100000000 -> 256 1*2^8 = 256
从右至左 用该位的值 * 2^x次方 x初始值是0 每次递增1

先来了解一下计算机的存储单位和原码 反码 补码的概念。
计算机最小的存储单位:比特bit 。8bit == 1 字节

java里的数据存储和计算 都是使用补码来操作的
二进制有正负之分,但是计算机并不识别正负号,为了让计算机识别正负号,引入了符号位0,1,
0代表正,1代表负。且把符号位置于该数的最高数值位之前,这样表示的数称为机器数(或称机器码),
即把符号位和数值位一起编码来表示的数就是机器数

1.原码
符号位为0表示正数,为1表示负数数值部分用二进制数的绝对值表示的方法称为原码表示法,通常用[X]原表示X的原码。
例子:
+59的原码为:00111011
-59的原码为: 10111011

2.反码
一个数如果为正,则它的反码与原码相同;一个数如果为负,则符号位为1,其余各位是对原码取反。
例子:
+59的反码为:00111011
-59的反码为: 11000100

3.补码
一个数如果为正,则它的原码、反码、补码相同;一个数如果为负,则符号位为1,其余各位是对原码取反,然后整个数加1。
例子:
+59的反码为:00111011
-59的反码为: 11000101

Java的数据类型
java是一门强类型的语言 任何变量声明必须指定类型。成员变量具有初始值 初始值是什么取决于数据类型。

java中数据类型都有哪些呢?
1. 基本数据类型 -- 4类8种
2. 引用数据类型 -- 主要包括 类 数组 接口


八种基本数据类型


1.数值类型--整数类型
1.1 字节型:用 byte 来表示,用8位2进制存储 占1个字节 取值范围[-128,127]。

1.2 短整型:用 short 表示,用16位2进制表示 占2个字节 取值范围 [-32768,32767]。

1.3 整型:用 int 表示,用32位2进制表示 占4个字节 取值范围[-231,231-1] 取值范围[-2147483648,2147483647]。

1.4 长整型:用 long 表示,用64位2进制表示 占8个字节 取值范围 [-263,263-1]。
注意 整型数据默认是 int 类型 可以把不超出byte范围的数据 赋值给 long。
在整型数据之后加一个 l或L 可以标识为 long类型的数据 可以增加取值范围,由于小写的l 和 整数1 太相似 故推荐使用 大写L。

2.数值类型--浮点型
2.1 单精度:用 float 表示, 32位2进制表示 占4个字节 取值范围 比long大的多 E38
它保证了7位有效数字 不保证第八位是否有效 也不保证一定无效。

2.2 双精度:用 double 表示, 64位2进制表示 占8个字节 取值范围比 float,它保证了15位有效数字 参与运算时使用 14位 故它成为双精度。
注意:所有的浮点型默认是double类型的 且不能把不超出范围的浮点型数据 给 float存储
如何让浮点型数据表示为 float类型呢 ?
加小写f 或大写 F
浮点型数据 使用科学计数法来存储 所以他们的取值范围远远大于整型。

3.数值类型--字符型
字符型:用 char 表示,16位二进制 占2个字节 取值范围[0,65535]
一对单引号括起来的 单个字符 就是一个字符型数据,字符型数据可以参与运算,因为字符型数据参与运算时 使用的自己的位置号 也可以说是编码值。
例如:"ABCDEFG" 'A' 65 'B'66 'C'67
注意: 字符型数据对应的整数 没有负数

4.布尔类型
布尔型:用 boolean 表示,它只有两个值 true和 false 代表真和假
它支持逻辑运算 因此又称为逻辑类型 它是电脑可以进行逻辑运算的 重要支持。它占4个字节 如果在数组中 它占1个字节

Java里基本数据类型转换(不涉及到 布尔型)
分为两种情况:
1.自动转换
2.强制转换
大类型转到小类型数据,不能自动的转换需要进行强制转换,否则会报错

如何进行强制转换呢 ?
格式:
小类型 小类型变量 = (小类型)大类型变量 || 小类型变量 = (小类型)大类型变量
引用数据类型强转,也是这个格式。

类型强制转换会引发问题吗?
小类型 真实空间不够使用 那么在大类型数据里进行截取 截取之后数据可能会发生改变,如果真的超出了取值范围 那么尽量不要强转。

Java的运算符


算数运算符
内容 : + - * / % ++ --
特性 : 两个数值进行算术运算符操作 其表达式就是算数表达式
算数表达式会有结果值 也可以表达式执行完会有返回值,结果是两个操作数中 大类型的类型。如果操作数的双方均为 byte short char 中的类型 那么结果自动上升到 int 类型。

++ 自增
-- 自减
使用格式1 :

int i = 0;
i++; i--;

使用格式2 :

int i = 0;
++i; --i;

每当程序执行到 ++ 时 , 都会使得变量的值增加 1
每当程序执行到 -- 时 , 都会使得变量的值减少 1

注意 ++ -- 只能操作用于变量
我们发现 ++ -- 既可以出现在变量的前面 还可以出现在变量的后面 有什么区别吗?
当 ++ -- 在前面时 会先自增自减再使用变量
当 ++ -- 在后面时 会先使用变量在自增自减

看个例子:

public class MapNullToNothing {
    public static void main(String[] args) {
        int a = 6;
        int b = 3;
        System.out.println(b);//输出结果是 3
        int i = b++;
        System.out.println(b);//输出结果是 4
        System.out.println(i);//输出结果是 3
        int y = b--;
        System.out.println(b);//输出结果是 3
        System.out.println(y);//输出结果是 4

        int x = ++a;
        System.out.println(a);//输出结果是 7
        System.out.println(x);//输出结果是 7
        int z = --a;
        System.out.println(a);//输出结果是 6
        System.out.println(z);//输出结果是 6
    }
}

赋值运算符
分为普通的赋值符 =
还有扩展赋值运算符 += -= *= /= %=
% java里叫 取模
x += y 等价于 x = x+y;
x -= y 等价于 x = x-y;
x = y 等价于 x = xy;
x /= y 等价于 x = x/y;
x %= y 等价于 x = x%y;
扩展的赋值运算还有一个特殊的功能 ,隐含了类型的强制转换

关系运算符
< > >= <= == !=
两个值 进行关系运算符运算 那么就变成了关系表达式,关系表达式会返回一个 布尔型 的结果。

三目运算符
格式: 布尔表达式(表达式结果是布尔值) ? 表达式1(可以返回任意类型的值) :表达式2(可以返回任意类型的值)
x ? y : z ;
执行规则
当程序来到三目运算符时 , 会首先计算布尔表达式的值
如果结果为 true 那么整个表达式选择表达式1为整个表达式的结果
如果结果为 false 那么整体表达式选择表达式2为整个表达式的结果
使用三目运算符求值:

// 最大值
max = x > y ? (x > z ? x : z) : (y >z ? y : z) ;
// 最小值
min = x < y ? (x < z ? x : z) : (y < z ? y : z);
// 中间值
num = x > y ? (x < z ? x : ( y > z ? y : z )) : (y < z ? y : (x > z ? x : z));

逻辑运算符
&逻辑与 &&短路与
格式 :
布尔值1 & 布尔值2 结果是 布尔值
布尔值1 && 布尔值2 结果是 布尔值
执行规则:
如果布尔值1 和 布尔值2 结果均为 true 那么整个表达式结果为true
反之 结果为 false

&和&&不同之处
& 如果布尔值1为false的话 仍然会判断 布尔值2 的值
&&如果布尔值1为false的话 那么直接得到结果 不去判断 布尔值2
只要没特殊要求 那么使用 && 因为效率高

|逻辑或 ||短路或
格式:
布尔值1 | 布尔值2 结果是 布尔值
布尔值1 || 布尔值2 结果是 布尔值
执行规则:
如果布尔值1 和 布尔值2 其中有一个值或两个值为 true 那么整个表达式为 true
反之 整个表达式为 false

不同之处
| 如果布尔值1 为true 仍然会判断布尔值 2
|| 如果布尔值1位 true 那么不会判断布尔值2 直接得出结果

!非
格式:
!布尔值 结果是布尔值 取反
执行规则
如果布尔值 为true 那么结果为 false
如果布尔值 为false 那么结果为 true

^异或
格式
布尔值1 ^ 布尔值2 结果是布尔值
执行规则
当布尔值1 和 布尔值2 一个为 true 一个为 false 时 整个表达式结果是 true
反之 表达式结果为 false

位运算符 
变量 使用位运算符 如果是 byte short char,那么会先提升到 int类型
如果 要用 a * 4 那么效率最高的做法是  a << 2
<<  左移   补0
格式 : x << y
执行规则:x 左移 y位,等同于  x * 2^y 
例如  5 << 2   == 5 * 2^2
0 0000101 5的补码
0 0001010 左移一位
0 0010100 左移两位  2^2 + 2^4 = 20
1 0000101 -5的补码
1 0010100 左移两位   == -20 

>>  右移  补符号位
格式: x >> y ,等同于 x / 2^y 
例如  5 >> 1  == 2
0 0000101 5的补码
0 0000010 右移一位 2

3 >> 1  == 1
0 0000011
0 0000001 == 1

负数 右移
-5 > 1 = -3     
1 0000011   
1 0000101
1 0000101 -5的补码
1 0000100 -5的反码
1 1111011 -5的原码
        
1   1111101    右移一位  会导致少一位  补符号位
1   0000010    反码
1   0000011
                
                
                
-4 >> 1
1 0000100 -4的补码
1 0000011 -4的反码
1 1111100 -4的原码
                
1 1111110 -4原码右移一位  补1
1 0000001 反码
1 0000010 补码
                
                
-4 >> 2
1 0000100 -4的补码
1 0000011 -4的反码
1 1111100 -4的原码
                
1 1111111 -4右移2两位 补两个1
1 0000000 反码
1 0000001 补码
                
注意 :
    正数右移 补0
    负数右移 补1
    总体来说 补符号位
                
        
        
>>> 无符号右移
    正数右移 n位 补0
    负数右移 n位 补0

    -4 >> 1 == 2147483647
    1 24个1 1111100 -4的原码    
    01 24个1 111110
                
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,393评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,790评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,391评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,703评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,613评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,003评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,507评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,158评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,300评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,256评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,274评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,984评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,569评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,662评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,899评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,268评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,840评论 2 339

推荐阅读更多精彩内容

  • 前言: 最近在学习javascript中数据类型、运算符,以及运算符优先级等相关基础知识,相对简单、基础但也很重要...
    饥人谷_远方阅读 758评论 0 3
  • 运算符是处理数据的基本方法,用来从现有的值得到新的值。JavaScript 提供了多种运算符,本章逐一介绍这些运算...
    徵羽kid阅读 653评论 0 0
  • 11.类型和运算 11.1进制 对于任何一种进制---X进制,就表示某一位置上的数运算时是逢X进一位后自己归0。 ...
    ADMAS阅读 630评论 0 0
  • 第十章 数字广告(下):落地页是第一生产力 1.落地页:营销基本功的修炼 点击型落地页 线索生成型落地页 2.落地...
    April5599阅读 145评论 0 0
  • 滑蛋牛肉粥、西洋菜饼、腐皮卷、春卷、流沙包 早加餐:香蕉午加餐:小蛋糕晚水果:草莓 参考目标: 1份豆2份肉3份“...
    静趣_儿童心理师阅读 125评论 0 0