【学习归纳自我总结版】尚硅谷学习第二天

数据存储和运算符

1.进制

1.1进制的分类
十进制 二进制 八进制 十六进制
数字范围 0-9 0-1 0-7 0-9,a-f
进位规则 逢十进一 逢二进一 逢八进一 逢十六进一
示例 125 0111 175 7F
说明 每三位二进制是一位八进制值 每四位二进制是一位十六进制值
1.2在代码中如何表示四种进制的常量值
  1. 十进制:正常表示
  2. 二进制:0b或0B开头
  3. 八进制:0开头
  4. 十六进制:0x或0X开头

2.计算机存储单位

  • **字节(Byte):**是计算机信息技术用于计量存储容量的一种计量单位,一字节等于八位。
  • **位(bit):**是数据存储的最小单位,也就是二进制。二进制数系统中,每个0或1就是一个位,叫做bit(比特),其中8bit就称为一个字节(Byte)。
  • 转换关系
    8 bit = 1 Byte
    1024 Byte = 1KB
    1024 KB = 1MB
    1024 MB = 1GB
    1024 GB = 1TB
  • float:单精度浮点型,占内存:4个字节,精度:科学计数法的小数点后6~7位。
  • double:双精度浮点型,占内存:8个字节,精度:科学计数法的小数点后15~16位。

3.计算机如何表示数据

3.1原码、反码、补码与符号位概念

计算机数据的存储使用二进制补码形式存储,并且最高位是符号位,最高位1是负数,最高位是0为正数。

规定:

  • 正数的补码与反码、原码一样,称为三码合一;
  • 负数的补码与反码、原码不一样;
  • 负数的原码:把十进制转为二进制,然后最高位设置为1
  • 负数的反码:在原码的基础上,最高位不变,其余位取反
  • 负数的补码:反码+1
3.2如何表示小数?
  • 为什么float(4个字节)比long(8个字节)的存储范围大?
  • 为什么float和double不精确?
  • 为什么double(8个字节)比float(4个字节)精度范围大?
    因为float、double底层也是二进制,先把小数转为二进制,然后把二进制表示为科学计数法,然后只保存:①符号位②指数位(需要移位)③尾数位
  • 浮点数的二进制



    float类型小数:8.25
    8.25的二进制:1000.01
    1000.01转为科学计数法:1.00001*2的3次,小数点往左移动3位
    符号位0 ,指数位3+127 (偏移量)=130 转为二进制为10000010,尾数00001,低位补0。
  • 0 10000010 00001000000000000000000 原码
  • 0 10000010 00001000000000000000000 反码
  • 0 10000010 00001000000000000000000 补码
3.3一个字符到底占几个字节?

在JVM中,一个字符占2个字节,Java使用Unicode字符集来表示每一个字符,即每一个字符对应一个唯一的Unicode编码值。char类型的数值参与算术运算或比较大小时,都是用编码值进行计算的。

在文件中保存或网络中传输时文本数据时,和环境编码有关。如果环境编码选择ISO8859-1(又名Latin),那么一个字符占一个字节;如果环境编码选择GBK,那么一个字符占1个或2个字节;如果环境编码选择UTF-8,那么一个字符占1-4个字节。

4.基本数据类型转换

4.1自动类型转换(隐式类型转换)

自动转换 :将取值范围小的类型自动提升为取值范围大的类型。
转换规则

  • 当把存储范围小的值(常量值、变量的值、表达式计算的结果值)赋值给存储范围大的变量时。
  • 当存储范围小的数据类型与存储范围大的数据类型一起混合运算时,会按照其中最大的类型运算。
  • 当byte、short、char数据类型进行算术运算时,按照int类型处理。
4.2强制类型转换(显式类型转换)

强制类型转换 :将取值范围大的类型强制转换成取值范围小的类型。

比较而言,自动转换是Java自动执行的,而强制转换是需要我们自己手动执行。
转换格式

复制代码
数据类型 变量名  = (数据类型)被强转数据值

转换规则

  • 当把存储范围大的值(常量值,变量的值,表达式计算的结果值)赋值给了存储范围小的变量时,需要强制类型转换,提示:有风险,可能会损失精度或溢出
  • 当把某个值想要提升数据类型时,也可以使用强制类型转换
4.3逻辑运算符

逻辑运算符 :用来连接两个布尔类型值的运算符(!除外),运算结果也是boolean值true或者false。
注意:&&和&的区别,||和|区别

  • &&和&的区别:&&有短路效果,左边为false,右边不执行;&左边无论是什么,右边都会执行。
  • ||和|的区别:||有短路效果,左边为true,右边不执行;|左边无论是什么,右边都会执行。
4.4位运算符
位运算符 符号解释
& 按位与,当两位相同为1时才返回1
| 按位或,只要有一位为1即可返回1
~ 按位非,将操作数的每个位(包括符号位)全部取反
^ 按位异或。当两位相同时返回0,不同时返回1
<< 左移运算符
>> 右移运算符
>>> 无符号右移运算符
  • 位运算符的运算过程都是基于补码运算,但是看结果,我们得换成原码,再换成十进制看结果。
  • 从二进制到十进制都是基于原码。
  • 正数的原码反码补码都一样,负数原码反码补码不一样
  • byte,short,char在计算时按照int类型处理
    如何区分&,|,^是逻辑运算符还是位运算符?
    如果操作数是boolean类型,就是逻辑运算符,如果操作数是正数,那么就是位运算符。
4.4.1左移<<
  • 运算规则:左移几位就相当于乘以2的几次方
  • 注意:当左移的位数n超过该数据类型的总位数时,相当于左移(n-总位数)位
4.4.2右移>>
  • 快速运算:类似于除以2的n次,如果不能整除,向下取整。
4.4.3无符号右移>>>
  • 运算规则:往右移动后,左边空出来的位直接补0,不看符号位
  • 正数:和右移一样.
  • 负数:右边移出去几位,左边补几个0,结果变为正数.
4.4.4运算符优先级

口诀:

单目运算排第一;

乘除余二加减三;

移位四,关系五;

等和不等排第六;

位与,异或和位或;短路与和短路或;

依次从七到十一;

条件排在第十二;

赋值一定是最后.

相关推荐
东京老树根10 分钟前
自动变为 VIP 文章
笔记·学习
HappyAcmen17 分钟前
线代第三课:n阶行列式
笔记·学习·线性代数
Moso_Rx25 分钟前
JavaEE——Thread类的基本用法
java·java-ee
魔道不误砍柴功26 分钟前
Jakarta EE 11发布:云原生Java企业应用的新标准
java·开发语言·云原生
bug菌27 分钟前
经理突然问我为什么BigDecimal可以不丢失精度?我表示...😨
java·后端·java ee
By北阳35 分钟前
2025年AI开发学习路线
人工智能·学习·ai·aigc
创码小奇客40 分钟前
MongoDB:数据库界的 “狂野西部牛仔”
java·mongodb·trae
Spring-wind1 小时前
【golang】为什么协程开销小于线程
java·开发语言·golang
隔壁小查1 小时前
【后端开发】Spring MVC-常见使用、Cookie、Session
java·spring·mvc
呦呦鹿鸣Rzh1 小时前
SpringMVC的请求-文件上传
java·前端·html