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

数据存储和运算符

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运算符优先级

口诀:

单目运算排第一;

乘除余二加减三;

移位四,关系五;

等和不等排第六;

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

依次从七到十一;

条件排在第十二;

赋值一定是最后.

相关推荐
菜的不敢吱声21 分钟前
swift学习第4天
服务器·学习·swift
李慕婉学姐4 小时前
【开题答辩过程】以《基于JAVA的校园即时配送系统的设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
java·开发语言·数据库
想进部的张同学4 小时前
hilinux-3599---设备学习---以及部署yolo
学习·yolo·海思
HyperAI超神经5 小时前
【vLLM 学习】Rlhf
人工智能·深度学习·学习·机器学习·vllm
奋进的芋圆5 小时前
Java 延时任务实现方案详解(适用于 Spring Boot 3)
java·spring boot·redis·rabbitmq
sxlishaobin6 小时前
设计模式之桥接模式
java·设计模式·桥接模式
model20056 小时前
alibaba linux3 系统盘网站迁移数据盘
java·服务器·前端
荒诞硬汉6 小时前
JavaBean相关补充
java·开发语言
提笔忘字的帝国6 小时前
【教程】macOS 如何完全卸载 Java 开发环境
java·开发语言·macos
2501_941882486 小时前
从灰度发布到流量切分的互联网工程语法控制与多语言实现实践思路随笔分享
java·开发语言