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

数据存储和运算符

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

口诀:

单目运算排第一;

乘除余二加减三;

移位四,关系五;

等和不等排第六;

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

依次从七到十一;

条件排在第十二;

赋值一定是最后.

相关推荐
架构文摘JGWZ23 分钟前
Java 23 的12 个新特性!!
java·开发语言·学习
小齿轮lsl28 分钟前
PFC理论基础与Matlab仿真模型学习笔记(1)--PFC电路概述
笔记·学习·matlab
Aic山鱼1 小时前
【如何高效学习数据结构:构建编程的坚实基石】
数据结构·学习·算法
qq11561487071 小时前
Java学习第八天
学习
拾光师1 小时前
spring获取当前request
java·后端·spring
aPurpleBerry1 小时前
neo4j安装启动教程+对应的jdk配置
java·neo4j
天玑y1 小时前
算法设计与分析(背包问题
c++·经验分享·笔记·学习·算法·leetcode·蓝桥杯
我是苏苏1 小时前
Web开发:ABP框架2——入门级别的增删改查Demo
java·开发语言
xujinwei_gingko1 小时前
Spring IOC容器Bean对象管理-Java Config方式
java·spring
2301_789985941 小时前
Java语言程序设计基础篇_编程练习题*18.29(某个目录下的文件数目)
java·开发语言·学习