数据类型与运算符

一、进制

1.1 进制的区分

1.2进制的换算

只要掌握计算器的方式即可。人工计算的方式了解一下就行了。

二、计算机数据的存储原理

2.1 存储单位

最小的单位:比特位        bit          1位比特要么为0,要么为1

最基本的单位:字节        byte        1个字节=8位

1个字节:1B(B=1byte)

1KB=1024B

1MB=1024KB

1GB=1024MB

1TB=1024GB

1PB=1024TB

2.2 Java的八种数据类型

整数类型:

byte        1个字节        取值范围:2^-7——2^7-1

short        2个字节        取值范围:2^-15——2^15-1

int           4个字节        取值范围:2^-31——2^31-1

long        8个字节        取值范围:2^-61——2^61-1

小数类型:

flot                4个字节        

double         8个字节

字符类型:

char        4个字节

布尔类型:

boolean        1个字节

如下图所示:

2.3 符号位

规定:

用0表示正数,1表示负数

二进制中最高位(最左位)就是符号位

符号位针对于byte,short,int.long,flot,double这些类型而言

2.3 原码、反码、补码

00000100 => 4
10000100 => -44 + (-4)00000100+ 10000100----------10001000   => -8  ? 不对

因为我们不仅仅要表示数字,还得考虑正、负数的计算问题,所以需要设计新的规则,便于存储和计算,这个时候就提出了原码、反码、补码。

计算机的底层存储和计算都是基于补码的。规定:

  • 正数:原码、反码、补码都一样,三码合一

  • 负数:

    • 原码:最高位是1,其余位是数据位,这些数据位与其绝对值的二进制序列是一样的

    • 反码:最高位不变,其余位在原码的基础上取反(0变1,1变0)

    • 补码:在反码的基础上 + 1

正数的25:+25原码:00011001反码:00011001补码:00011001负数的25:-25原码:10011001反码:11100110补码:11100111

2.4 整数如何存储(以byte为例)

问题:1个字节可以存储的整数范围是什么?

结论:-128 ~ 127

正数:0000 0001     对应十进制的1....0111 1111     对应的十进制127负数:1000 0001     对应的十进制-127....1111 1111	 对应的十进制-1补码:1000 0001反码:1000 0000原码:1111 1111补码:1111 1111反码:1111 1110原码:1000 0001零:0000 0000   对应十进制的01000 0000   对应十进制的-128(特殊的规定)用它来表示-128,既要符合计算的规则,又要符合数据表示的规则。-127 - 1 = -128-127的补码:1000 00011的补码:0000 00011000 00010000 0001-=========1000 0000

注意:从二进制->十进制,用权值相加法,需要用原码计算

2.5 小数如何存储

(1)无论是flot或double,都是浮点类型,在存储时都是不精确、都有误差的

(2)flot一般在小数点后最多7-8位。        double一般在小数点后最多15-16位

(3)flot虽然是4个字节但是因为存储方式的不同,它的范围比long大的多

2.6 char类型如何存储

因为计算机里面只有二进制,所以所有的文字、标点符号等也必须用一个二进制值表示。为了统一,就有一些组织就规定了每一个字符对应哪个二进制值,这个对应表被称为字符集。

最古老的字符集是ASCII码字符集,这个字符集中值规定了0-127,共128个字符。

常见的ASCII码字符集

'a':97        'b':98
'A':65        'B':66
'0':48        '1':49
'\t':9        ' ':32

char类型的表示方式有3种:

  • '涣'

  • 28067

  •  '\u6da3';

三、基本数据类型的转换

3.1 自动类型转换(小转大)

(1)当把数据类型较小的值赋值给较大的数据类型时,就会自动提升

(2)当对byte、short、char 进行计算的时候,他们的数据类型就会自动转为int

(3)当有多种数据类型的值进行混合运算的时候,取其中最大的数据类型

三种情况依次如下图所示:

package com.yang;/*** @author yzh* @date 2024/07/17*/public class Test05 {public static void main(String[] args) {char a ='啊';int b=a;System.out.println(b);}
}
package com.yang;/*** @author yzh* @date 2024/07/17*/public class Test05 {public static void main(String[] args) {byte a =6;byte b=1;System.out.println(a+b);int i = a + b;System.out.println(i);}
}
package com.yang;/*** @author yzh* @date 2024/07/17*/public class Test05 {public static void main(String[] args) {byte a = 6;int b = 1;long c = 15L;float d = 5.3f;double e = 1.39;System.out.println(a + b + c + d + e);double v = a + b + c + d + e;System.out.println(i);}
}

3.2 强制数据类型转换(大转小)

(1)当我们把一个较小的数据类型赋值给一个较大的数据类型的时候,就要使用强制数据类型转换,但是此时可能出现损失精度或溢出的风险。

(2)当我们需要故意提升一个值(常量值,变量值,表达式的结果值) 的类型的时候,也需要强制数据类型转换。

两种情况依次如下图所示:

package com.yang;/*** @author yzh* @date 2024/07/17*/public class Test05 {public static void main(String[] args) {double d = 3.14;int num = (int)d;System.out.println(d);//3.14System.out.println(num);//3int big = 200;byte b = (byte)big;System.out.println(big);//200System.out.println(b);//-56/*200的二进制 00000000 00000000 00000000 11001000(byte)截断  11001000补码:11001000(如果是计算器看结果,直接用它即可)反码:11000111原码:10111000(人工权值相加法,需要看原码)*/}
}
package com.yang;/*** @author yzh* @date 2024/07/17*/public class Test05 {public static void main(String[] args) {int x = 1;int y = 2;System.out.println(x/y);//0//int / int 结果还是 int//如果希望结果是double类型,在不改变x,y变量类型前提下,怎么办?System.out.println((double)x/y);//0.5//取x的值1之后,将1强制提升为double类型的1.0,然后与y进行计算,double/int结果是doubleSystem.out.println((double)(x/y));//0.0//先计算x/y,然后结果0再提升为doubleboolean b = false;//System.out.println((int)b);//Java中不允许}
}

四、运算符

4.1 算术运算符

例题:定义一个变量,赋值为一个四位数整数,例如1234,如通过运算操作求出个位,十位,百位,千位

package com.yang;import java.util.Scanner;/*** @author yzh* @date 2024/07/17*/public class Test05 {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.print("请输入一个四位的正整数:");int i = scanner.nextInt();System.out.println("个位上的数为:"+i%10);System.out.println("十位上的数为:"+i/10%10);System.out.println("百位上的数为:"+i/100%10);
//        System.out.println("千位上的数为:"+i/1000);也可System.out.println("千位上的数为:"+i/1000%10);}
}

4.2 会改变变量值的运算符

4.2.1 赋值运算符

4.2.2 自增自减运算符

自增自减运算符本身属于算术运算符。

情况一:自增自减表达式是独立的语句

自增自减在前在后没有区别。++a;与 a++;相同, --a; 与 a--;相同

情况二:自增自减表达式不是独立的语句

以自增为例: ++在前:先对变量自增1,然后取自增变量的值做其他运算 ++在后:先取自增变量的值放一边,然后自增变量自增1,用刚刚取出来的值做其他运算

如:

package com.yang;/*** @author yzh* @date 2024/07/17*/public class Test05 {public static void main(String[] args) {int i = 1;int j = i++;       //j=1 ,  i=2int k = i++ * ++j + ++i * j++;  //  2*2+ 4*2 =12  i = 4 , j =3System.out.println("i = " + i);System.out.println("j = " + j);System.out.println("k = " + k);}
}

4.2.3 关系运算符

关系运算符是用于比较两个值的大小关系。所有关系运算符的运算结果只有两种:true或false。

4.2.4 逻辑运算符

逻辑运算符是用于表示两个条件的关系。

逻辑与:&用于表示两个条件必须“同时”成立。true & true 结果truetrue & false 结果falsefalse & true 结果falsefalse & false 结果false逻辑或:|用于表示两个条件只要有1个成立就行。true | true 结果truetrue | false 结果truefalse | true 结果truefalse | false 结果false逻辑异或:^用于表示两个条件只能成立1个。不能同时成立,也不能同时不成立。即两个条件的结果必须不同。true ^ true 结果falsetrue ^ false 结果truefalse ^ true 结果truefalse ^ false 结果false逻辑非:!对一个条件取反!true 结果false!false 结果true短路与:&&用于表示两个条件必须“同时”成立。true && true 结果truetrue && false 结果falsefalse && true 结果falsefalse && false 结果false&&的效率比&高。因为当左边为false时,右边就不看了。短路或:||用于表示两个条件只要有1个成立就行。true || true 结果truetrue || false 结果truefalse || true 结果truefalse || false 结果false||的效率比|高。因为||当左边为true时,右边就不看了。

4.2.5 条件运算符

如:

package com.yang;/*** @author yzh* @date 2024/07/17*/import java.util.Scanner;/*** 声明一个int类型的变量year,赋值为当年的年份值,判断该年是否是闰年,输出判断结果。* 闰年的判断标准是:* (1)年份year可以被4整除,但不能被100整除* (2)或年份year可以被400整除*/
public class Test04 {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.print("请输入年份:");int year = scanner.nextInt();System.out.println(((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) ? "闰年" : "非闰年");}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/872767.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring-Cache 缓存

1.简介 2.SpringCache 整合 简化缓存开发 1.导入依赖 <!-- spring cache --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId></dependency>2.redis 作为缓存…

二分法binary search

欢迎来到一夜看尽长安花 博客&#xff0c;您的点赞和收藏是我持续发文的动力 对于文章中出现的任何错误请大家批评指出&#xff0c;一定及时修改。有任何想要讨论的问题可联系我&#xff1a;3329759426qq.com 。发布文章的风格因专栏而异&#xff0c;均自成体系&#xff0c;不足…

解决一下git clone失败的问题

1&#xff09;.不开梯子&#xff0c;我们用https克隆 git clone https://github.com 报错&#xff1a; Failed to connect to github.com port 443 after 2091 ms: Couldnt connect to server 解决办法&#xff1a; 开梯子&#xff0c;然后# 注意修改成自己的IP和端口号 gi…

docker搭建普罗米修斯监控gpu

ip8的服务器监控ip110和ip111的服务器 被监控的服务器110和111只需要安装node-export和nvidia-container-toolkit 下载镜像包 docker pull prom/node-exporter docker pull prom/prometheus docker pull grafana/grafana新建目录 mkdir /opt/prometheus cd /opt/prometheus/…

生信软件27 - 基于python的基因注释数据查询/检索库mygene

1. mygene库简介 MyGene.info提供简单易用的REST Web服务来查询/检索基因注释数据&#xff0c;具有以下特点&#xff1a; mygene技术文档&#xff1a; https://docs.mygene.info/en/latest/ 多物种支持: 包括人、小鼠、大鼠、斑马鱼等多个模式生物&#xff1b; 多数据源聚合…

卷积神经网络图像识别车辆类型

卷积神经网络图像识别车辆类型 1、图像 自行车: 汽车: 摩托车: 2、数据集目录 3、流程 1、获取数据,把图像转成矩阵,并随机划分训练集、测试集 2、把标签转为数值,将标签向量转换为二值矩阵 3、图像数据归一化,0-1之间的值 4、构造卷积神经网络 5、设置图像输入…

记录些MySQL题集(8)

ACID原则、事务隔离级别及事务机制原理 一、事务的ACID原则 什么是事务呢&#xff1f;事务通常是由一个或一组SQL组成的&#xff0c;组成一个事务的SQL一般都是一个业务操作&#xff0c;例如聊到的下单&#xff1a;「扣库存数量、增加订单详情记录、插入物流信息」&#xff0…

Qt5.12.2安装教程

文章目录 文章介绍下载连接安装教程 文章介绍 安装Qt5.12.2 下载连接 点击官网下载 安装包下载完毕 安装教程 点开设置&#xff0c;添加临时储存库&#xff0c;复制连接“https://download.qt.io/online/qtsdkrepository/windows_x86/root/qt/” 点击测试&#xff0…

set类和map类介绍和简单使用

目录 set类介绍与简单使用 set类 multiset类 map类介绍与简单使用 map类 multimap类 set类介绍与简单使用 set类是一种关联式容器&#xff0c;在数据检索时比序列式容器效率更高。本质是一个常规的二叉搜索树&#xff0c;但是为了防止出现单支树导致效率下降进行了相关优…

【Linux】将IDEA项目部署到云服务器上,让其成为后台进程(保姆级教学,满满的干货~~)

目录 部署项目到云服务器什么是部署一、 创建MySQL数据库二、 修改idea配置项三、 数据打包四、 部署云服务器五、开放端口号六 、 验证程序 部署项目到云服务器 什么是部署 ⼯作中涉及到的"环境" 开发环境:开发⼈员写代码⽤的机器.测试环境:测试⼈员测试程序使⽤…

SQL面试题-留存率计算

表定义&#xff1a; create table if not exists liuliang_detail (user_id string comment ,record_time string comment yyyymmdd hh:mi:ss ) comment 流量明细表 ; 方法一&#xff1a; 计算的是整段时间范围内&#xff0c;每一天为基准的所有的留存1、2、7天的用户数。 …

WEB前端05-JavaScrip基本对象

JavaScript对象 1.Function对象 函数的创建 //方法一&#xff1a;自定义函数 function 函数名([参数]) {函数体[return 表达式] }//方法二&#xff1a;匿名函数 (function([参数]) {函数体[return 表达式] }); **使用场景一&#xff1a;定义后直接调用使用(只使用一次) (fun…

成为git砖家(1): author 和 committer 的区别

大家好&#xff0c;我是白鱼。一直对 git author 和 committer 不太了解&#xff0c; 今天通过 cherry-pick 的例子搞清楚了区别。 原理 例如我克隆了著名开源项目 spdlog 的源码&#xff0c; 根据某个历史 commit A 创建了分支&#xff0c; 然后 cherry-pick 了这个 commit …

《系统架构设计师教程(第2版)》第11章-未来信息综合技术-06-云计算(Cloud Computing) 技术概述

文章目录 1. 相关概念2. 云计算的服务方式2.1 软件即服务 (SaaS)2.2 平台即服务 (PaaS)2.3 基础设施即服务 (IaaS)2.4 三种服务方式的分析2.4.1 在灵活性2.4.2 方便性方 3. 云计算的部署模式3.1 公有云3.2 社区云3.3 私有云3.4 混合云 4. 云计算的发展历程4.1 虚拟化技术4.2 分…

python课设——宾馆管理系统

python课设——宾馆管理系统 数据库课设-宾馆管理系统-python3.7pyqt5 简介 大二数据库课程设计&#xff08;3-4天工作量&#xff09;的项目&#xff0c;登录界面的ui设计参考了他人成果&#xff0c;其余ui以及所有后端部分全部独立完成&#xff0c;详细功能见功能模块图使用…

防火墙NAT地址转换和智能选举综合实验

一、实验拓扑 目录 一、实验拓扑 二、实验要求&#xff08;接上一个实验要求后&#xff09; 三、实验步骤 3.1办公区设备可以通过电信链路和移动链路上网(多对多的NAT&#xff0c;并且需要保留一个公网IP不能用来转换) 3.2分公司设备可以通过总公司的移动链路和电信链路访…

简单爬虫案例

准备工作&#xff1a; 1. 安装好python3 最低为3.6以上&#xff0c; 并成功运行pyhthon3 程序 2. 了解python 多进程原理 3. 了解 python HTTP 请求库 requests 的基本使用 4. 了解正则表达式的用法和python 中 re 库的基本使用 爬取目标 目标网站&#xff1a; https://…

scrapy框架爬取豆瓣top250电影排行榜(下)

&#xff08;3&#xff09;在 pipeline.py 文件中对数据进行存储&#xff0c;此程序先写 入 txt 文件中&#xff0c;是为了判断该程序是否能正确爬取出数据。 此处使用了 json 库&#xff0c;使用 ensure_ascii False&#xff0c;能够确 保非 ASCII 字符&#xff08;如中文&am…

贪心算法(2024/7/16)

1合并区间 以数组 intervals 表示若干个区间的集合&#xff0c;其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间&#xff0c;并返回 一个不重叠的区间数组&#xff0c;该数组需恰好覆盖输入中的所有区间 。 示例 1&#xff1a; 输入&#xff1a;inter…

SpringCloud网关的实现原理与使用指南

Spring Cloud网关是一个基于Spring Cloud的微服务网关&#xff0c;它是一个独立的项目&#xff0c;可以对外提供API接口服务&#xff0c;负责请求的转发和路由。本文将介绍Spring Cloud网关的实现原理和使用指南。 一、Spring Cloud网关的实现原理 Spring Cloud网关基于Spring…