包装类数学类位运算

包装类&数学类&位运算

1 包装类

把基本数据类型包装成引用数据类型

byte short int long float double char boolean void
Byte Short Integer Long Float Double Character Boolean Void
  • Void

Void类构造方法是私有的,所以不能创建对象。并且Void是一个最终类,没有子类。

public static Void demo1(){return null;}
  • 数值类型(Byte Short Integer Long Float Double)

Number是数值类型共同的父类

自动装箱:自动把基本数据类型转换成引用数据类型,是jdk5的特性。底层调用对应类型的valueOf方法

Byte 在-128到127范围内,返回同一个对象

Short/Integer/Long 在-128 到127范围内,返回同一个对象。超出范围返回新的对象

Float/Double 永远返回新的对象

Character 在0-127范围内返回同一个对象,超出范围返回新对象

Boolean就返回两个对象。

  • 自动装箱
// 基本数据类型int i = 10;// 装箱:利用基本数据类型的变量来构建了对应的引用数据类型的对象
//        Integer integer = new Integer(i);// jdk5特性:自动装箱  自动把基本数据类型包装成引用数据类型// 自动装箱底层自动调用对应类身上的valueOf方法Integer integer = 10;System.out.println(integer);Double d = 3.14;Character c = 'a';Integer in1 = 98;Integer in2 = 98;System.out.println(in1 == in2);
  • 自动拆箱
// 拆箱:将引用数据类型的对象转换成基本数据类型// 自动拆箱:自动调用xxxValue()方法将引用数据类型转换成基本数据类型
//        int a = in.intValue();int a = in;Double dou = 3.14;
//        dou.doubleValue();char c1 = c;// 当引用数据类型的包装类和对应的基本数据类型进行运算时会自动拆箱if (in1 > 100){}
  • 把字符串转换成对应的基本数据类型
   // 把字符串转换成对应的基本数据类型  parseXxx("")double v = Double.parseDouble("3.14");int i1 = Integer.parseInt("2");
//        Byte.parseByte("");
//        Short.parseShort("")
//        Long.parseLong("")
//        Float.parseFloat("")System.out.println(Boolean.parseBoolean("True"));
  • 包装类的哈希值

包装类产生的对象的哈希码是固定不变的

null的哈希码规定是0

oct 八进制

bin 二进制
hex 十六进制

//        NaN not a number   非数字double d1= 0.0 / 0;double d2= 0.0 / 0;System.out.println(d1 == d2);// 判断是否是非数字System.out.println(Double.isNaN(d1));// 将十进制转换成十六进制String s = Integer.toHexString(15);// 将十进制转换成二进制String s1 = Integer.toBinaryString(3);// 将十进制转换成八进制String s2 = Integer.toOctalString(8);System.out.println(s2);System.out.println(s1);System.out.println(s);

2 数学类

  • Math
// 自然指数System.out.println(Math.E);// 圆周率System.out.println(Math.PI);// 求绝对值System.out.println(Math.abs(-3));// 求立方根System.out.println(Math.cbrt(27));// 向上取整System.out.println(Math.ceil(-3.4));// 向下取整System.out.println(Math.floor(-3.7));// 四舍五入System.out.println(Math.round(3.57));// 最大值System.out.println(Math.max(10,20));// 最小值System.out.println(Math.min(10,20));// 加权函数  a的b次方System.out.println(Math.pow(2,10));// 随机数  [0,1)System.out.println(Math.random());// 平方根System.out.println(Math.sqrt(16));
  • BigDecimal 用于精确计算的类。

需要精确计算时,要求参数以字符串形式传递,底层使用按位运算

    public static void main(String[] args) {
//        double d1 = 3.0;
//        double d2 = 2.99;
//        System.out.println(d1 - d2);BigDecimal bigDecimal1 = new BigDecimal("3.0");BigDecimal bigDecimal2 = new BigDecimal("1.5");// 加法System.out.println(bigDecimal1.add(bigDecimal2));// 减法System.out.println(bigDecimal1.subtract(bigDecimal2));// 乘法System.out.println(bigDecimal1.multiply(bigDecimal2));// 除法System.out.println(bigDecimal1.divide(bigDecimal2));}
  • BigInteger 用于存储和计算非常大的整数。
		// 大十进制  大量数字的存储和计算BigInteger bigInteger1 = new BigInteger("67555558");BigInteger bigInteger2 = new BigInteger("675555586358");System.out.println(bigInteger1.multiply(bigInteger2));
  • DecimalFormat 数字格式化
		double d = 100.09 * 0.85;System.out.println(d);// 创建对象并且指定数据显示格式// 用0代表占位,表示一位数字。如果没有数字,用0代替
//        DecimalFormat decimalFormat = new DecimalFormat("00.00");// # 代表占位,表示一位数字。如果这一位没有数字,那么就不填充// 0.#0 明显不符合常识,不能使用
//        DecimalFormat decimalFormat = new DecimalFormat("#0.00");// 科学计数法DecimalFormat decimalFormat = new DecimalFormat("0.000E0");System.out.println(decimalFormat.format(d));

3 位运算

3.1 进制

二进制: 0 - 1,满二进一 以0B开头作为标识 0b0101 0b0110

		int i = 0b00100;System.out.println(i);

八进制: 0 - 7 满八进一 07 015 以0开头作为标识

十进制:0 - 9 满十进一

十六进制: 0 -9 a - f 满15进1 以0x开头作为标识

  • 进制的相互转换

  • 十进制转二进制:

    • 不断除以2,取余数,把余数倒排
  • 二进制转十进制

    • 从低位次 起,按位次乘以2的位次次幂,然后求和
    1101 = 1 * 2 ^ 0 + 0 * 2 ^ 1 + 1 * 2 ^ 2 + 1 * 2 ^ 3 = 1 + 0 + 4 + 8 = 13
    
  • 十进制向哪个进制转换,就除以哪个进制,然后余数倒排

  • 二进制转八进制

    • 从低位次 起,每三位看作一组,产生一个八进制数字。最高位不足三位,补0.三位以内,按照二进制向十进制的转换规则进行运算,产生的八进制数字按顺序排序
     010  111  011 = 0273
    
  • 八进制转二进制

    • 每一位八进制转换成三位二进制的数字,然后按顺序排列
    273 = 10 111 011
    
  • 二进制转十六进制:四变一的过程

    • 111 1110 1101 = 0x7ed
      
  • 十六进制转二进制:一变四的过程

3.2 原码反码和补码

所有的数据在底层都是二进制数据的补码形式存储的

正数的原码反码和补码都一致

image-20240620152353216

3.3 位运算

位运算使用的前提是要把数据转成二进制数据的补码形式进行运算。运算效率更高。

  • 按位与 : & 两个位都是1,结果是1,否则结果就是0
    • 任意一个数 & 一个偶数,结果一定是偶数
    • 任意一个数 & 1,如果结果是0,就是一个偶数
  • 按位或: | 两个位只要有一个是1,那么结果就是1,否则就是0
    • 任意一个数 | 一个奇数,结果一定是奇数
    • 任意一个数 | 0 ,结果还是本身
  • 按位异或: ^ 两个位相同是0,不同是1
    • 任何数异或自身结果是0,异或0就是自身
        int a = 10;int b = 20;
//        int temp = a;
//        a = b;
//        b = temp;
//        a = a ^ b;
//        b = a ^ b;// a ^ b ^ b =  a
//        a = a ^ b;// a ^ b ^ a =  ba = b - a;b = b - a;// b - (b - a) = aa = b + a;// a + b - a = bSystem.out.println(a);System.out.println(b);
  • 左移: << 左边丢弃,右边补0 左移n位就是乘以2的n次方
   3 << 20000 001100 00110012
  • 右移: >> 右边丢弃,左边补位(正数补0,负数补1) 右移n位就是除以2的n次方
 5 >> 200000101000000011

课堂练习: -6 >> 2

 原码:  10000110反码:  11111001补码; 11111010右移之后的补码:      11111110反码: 11111101原码: 10000010
  • >>>  无符号右移  : 和右移类似  但是最高位一律补0
    
  • ~ 取反

    • 将数字转换成二进制后,1变0,0变1.最高位按照-128,其他位按照二进制转十进制的规则计算,然后加上-128

    • ~3 =  -40000 00111111 1100-128 + 64 + 32 + 16 + 8 + 4 =  - 4
      
    • ~i = -i - 1;

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

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

相关文章

EtherCAT转Profinet网关配置说明第二讲:上位机软件配置

EtherCAT协议转Profinet协议网关模块(XD-ECPNS20),不仅可以实现数据之间的通信,还可以实现不同系统之间的数据共享。EtherCAT协议转Profinet协议网关模块(XD-ECPNS20)具有高速传输的特点,因此通过EtherCAT转Profinet网关实现数据传输和控制时速度的提升。在大规模的工业…

2024.7.6 鲜花

梅菲斯特——女王蜂 from K8He ラストチャンスに飢えたつま先が 踊り出すまま駆けたこの夜空 並のスタンスじゃ靡かない 星は宝石の憧れ 浮かぶ涙と汗は血の名残り 目の中でしか泳げなきゃ芝居 だけどステージが逃がさない いついつまでも憧れ 焦がれているよ I’ve never see…

C#学习笔记-事件

事件事件是类的一种成员,能够使类或对象具备通知能力。事件用于对象或类间的动作协调和信息传递。假设类A有某个事件,当这个事件发生时,类A会通知并传递事件参数(可选)给有订阅这个事件的类B,类B根据拿到的事件信息对事件进行响应处理。 事件模型 事件模型的5个组成部分:…

将nodejs迁移到D盘

参考双击安装,指定d盘查看文件夹查看环境变量,自动添加如下Path=D:\software\nodejs\打开cmd验证C:\Users\dogle>node -v v18.14.2C:\Users\dogle>npm -v 9.5.0C:\Users\dogle>echo %PATH% C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\WINDOWS\sy…

bluez 入门

**核心模块**:位于系统的最底层,直接与蓝牙硬件进行交互。核心模块实现了蓝牙的基础协议如HCI (Host Controller Interface),并通过DBUS提供API给上层应用。 **服务守护进程(bluetoothd)**:作为系统的守护进程运行,它处理所有的蓝牙服务和配置,如设备配对、连接管理、配…

chrome 浏览器如何设置不保存表单信息

chrome 浏览器如何设置不保存表单信息如何关闭表单自动填充(测试环境Chrome浏览器) https://download.csdn.net/blog/column/7594878/100576004如何禁用谷歌浏览器中的表单自动填充功能? https://zh-cn.fairsyndication.com/222-how-to-disable-form-autofill-in-google-chr…

数字设计--CDC

异步信号与同步信号 同步信号 频率相同,相位相同的两个信号 频率相同,相位差一定的两个信号 不同频率的两个信号也可能是同步的,比如分频出来的两个信号 异步信号 频率不同的两个信号 频率相同但相位差不定的两个信号 跨时钟域就是要解决信号从异步信号之间传输的问题。 亚稳…

数字设计--亚稳态

亚稳态 FPGA 等数字设备中的所有寄存器都定义了信号时序要求----允许每个寄存器在其输入端正确捕获数据并产生输出信号。为确保可靠操作,寄存器的输入必须在时钟边沿之前的最短时间(建立时间 setup time 或 \(t_{su}\))和时钟边沿之后的最短时间(保持时间 hold time 或 \(t…

数字设计--门控时钟与时钟切换

门控时钟(ICG) 使用门控时钟的原因 芯片功耗组成中,大部分是由时钟树消耗掉的。因为这些时钟树在系统中具有最高的切换频率,而且有很多时钟buffer,并且为了最小化时钟延时,它们通常具有很高的驱动强度。此外,即使输入和输出保持不变,接收时钟的触发器也会消耗一定的功耗。…

ComfyUI进阶篇:ComfyUI核心节点(二)

ComfyUI核心节点(二) 前言: 学习ComfyUI是一场持久战。当你掌握了ComfyUI的安装和运行之后,会发现大量五花八门的节点。面对各种各样的工作流和复杂的节点种类,可能会让人感到不知所措。在这篇文章中,我们将用通俗易懂的语言对ComfyUI的核心节点进行系统梳理,并详细解释每…

题目集7~8

由于个人原因,最后两次题目集未提交,对自己的放纵感到愧疚,后期的补练我也会抽出时间完成这两道题 经过分析,题目集7,是在前面的基础上加上了一个新概念:互斥开关,以及模拟一种受控窗帘, 在我的想法,互斥开关便可当作两个普通开关去完成电路,窗帘则是新增一个用电器。…

EtherCAT转Profinet网关配置说明第一讲:配置软件安装及介绍

网关XD-ECPNS20为EtherCAT转Profinet协议网关,使EtherCAT协议和Profinet协议两种工业实时以太网网络之间双向传输 IO 数据。适用于具有EtherCAT协议网络与Profinet协议网络跨越网络界限进行数据交换的解决方案。 网关XD-ECPNS20为EtherCAT转Profinet协议网关,使EtherCAT协议…