java数据类型、运算符

news2024/12/23 10:40:26

一、数据的表示详解

1.1 整数在计算机中的存储原理

任何数据在计算机中都是以二进制表示的。那这里肯定有人问,什么是二进制啊?所谓二进制其实就是一种数据的表示形式,它的特点是逢2进1。

数据的表示形式除了二进制(逢2进1),八进制(逢8进1)、还有十进制(逢10进1)、十六进制(逢10进1)等。

1.二进制中只有0和1两个数
    首先十进制的0和二进制的0是一样的,十进制的1和二进制的1也是 一样的。但是十进制中    有2,但是二进制中就没有2了
​
2.那么二进制是如何表示十进制的2呢?
    1
+   1       
——————————  
   10     这里两个1相加,结果为2,由于二进制满2进1,所以最终结果10
   
3.那么二进制是如何表示十进制的3呢?
    前面我们已经知道二进制10表示十进制的2,那么二进制10+1就表示十进制的3啊!
    10
+    1
—————————
    11   十进制的3对应的二进制是11
​
4.那么二进制是如何表示十进制4的呢?
    前面我们已经知道二进制11表示十进制的4,那么11+1就表示十进制的5啊
    11
+    1
—————————
   100   十进制的5对应的二进制是100
​

一个二进制数据都是采用+1的方式,逢2进1,一个一个算出来的。有没有更快的算出十进制对应二进制的方法呢?

  • 除2取余法

1.怎么做呢?
    答:让十进制数据连续除以2,直到商为0,余数反转
​
2.举例1:把十进制6转换为二进制   
            商   余数
    6/2     3    0
    3/2     1    1
    1/2     0    1
    然后把余数反转:6对应的二进制是110
    
3.举例2: 把十进制13转换为二进制
            商   余数
    13/2    6    1
    6/2     3    0
    3/2     1    1
    1/2     0    1
    然后把余数反转:10对应的二进制是1101
    

​

  • 计算机的最小存储单位

计算机中最小的存储单位是字节(Byte),一个字节占8位(bit),也就是说即使这个数据不足8位也需要用8位来存储。

我们随便找到一个文件,看文件的属性,可以看到文件的大小都是以字节为单位的。

1.2 字符在计算机中的存储原理

字符并不是直接存储的,而是把每一个字符编为一个整数,存储的是字符对应整数的二进制形式。美国人搞了一套字符和整数的对应关系表,叫做ASCII编码表。

ASCII编码表中字符编码的规律:
    1.字符0对应48,后面的1,2,3,4...9 对应的十进制整数依次往后顺延
    2.字符a对应97,后面的b,c,d,e...z 对应的十进制整数依次往后顺延
    3.字符A对应65,后面的B,C,D,E...Z 对应的十进制整数依次往后顺延

需要注意的是,在ASCII编码表中是不包含汉字的。

1.3 图片视频声音的存储原理

  • 图片的存储

如果你把一张图片不断的放大,你会看到有马赛克的效果。你会发现图片中的每一个细节是由一个一个的小方格组成的,每一个小方格中其实就是一种颜色。任何一种颜色可以使用三原色来表示,简称RGB,其中R(红色),G(绿色),B(蓝色),而RGB中每一种颜色又用一个字节的整数来表示,最小值是0最大值是255

RGB(0,0,0)表示黑色
RGB(255,255,255)表示白色
RGB(255,0,0) 表示红色
RGB(255,255,0) 表示红色和绿色混合为黄色
RGB(255,0,255) 表示红色和蓝色混合为紫色

你在画图板的颜色编辑器中可以通过指定RGB的值,来调整得到任意的颜色。一张图片实际上就是有很多个小方块的颜色组成的,而每一种颜色又是由RGB三原色的整数表示的,整数最终会转换为二进制进行存储。

  • 视频的存储

实际上视频和图片是一样的,把多张图片连续播放,在一秒钟内连续播放24张以上,由于人眼存在视觉暂留现象,人眼感受不到画面切换的时间间隔,就认为是连续的视频了。

  • 声音的存储

了解过物理的同学肯定知道,声音是以波的形式传播的。我们可以把声波在表示在一个坐标系上,然后在坐标系上取一些点,把这些点的坐标值以二进制的形式存储到计算机中,这就是声音的存储原理。

1.4 数据的其他表示形式

  • 二进制到十进制的转换

8421码

十进制怎么转十进制

1.十进制转十进制
    比如我们把12345进行分解:
        12345 = 10000 + 2000 + 300 + 40 + 5
              = 1*10^4 + 2*10^3 + 3*10^2 + 5*10^0
    我们发现:
        在十进制中如果把十进制的每一位从右往左从0开始编一个号,假设这一位数字是a,          那么这一位数表示的值就是:a*10^n;
    
----------------------------------------------------------------------二2.二进制转十进制:
    类比十进制:
        如果把二进制的每一位从从右往左0开始编一个号用n表示,假设二进制的每一位是a,
        那么这一位表示的十进制值是:a*2^n
        
    1)假设二进制的每一位都是1:
        128 64  32  16  8   4   2   1   每一位表示的十进制:a*2^n
        7   6   5   4   3   2   1   0   编号:n
        1   1   1   1   1   1   1   1   二进制的每一位:a
    
        二进制      十进制
        11111111 = 1*2^7  + 1*2^6 + 1*2^5 + ... + 1*2^0
                 = 128    + 64    + 32    + ... + 1
                 = 255
    
    2)假设二进制的为0010001
        128 64  32  16  8   4   2   1   每一位表示的十进制:a*2^n
        7   6   5   4   3   2   1   0   编号:n
        0   0   1   0   0   0   0   1   二进制的每一位:a
    
        二进制             十进制
        00001101 = 0*2^7 + 0*2^6 + 1*2^5 + ... + 1*2^0
                 = 0     + 0     + 32    + ... + 1
                 = 33
​
    3)8421码:从右往左给二进制的每一位数依次按照1 2 4 8...标记
        128 64  32  16  8   4   2   1
        0   0   1   0   0   0   0   1
        -----------------------------
        只需要将1位上的数字加起来,就是二进制对应的十进制
        
        二进制           十进制
        00001101 =      8+4+1
                 =      13
        
        0000111  =      4+2+1
                 =      7
        
        0001111  =      8+4+2+1
                 =      25

  • 二进制转八进制

前面我们说计算机中数据都是采用二进制来存储的,但是二进制阅读和编写起来都不太方便。为了便于阅读和书写,又推出了八进制、十六进制。

1.运算规则:
    把二进制的每三位一组合,然后对每三位用8421码进行计算,最后拼接到一起
    原因:因为111,的值是7, 再大满7就需要往进位了。 
    
2.把二进制11001110转换为八进制数据
    01  100 001     二进制每三位一组合
    1   4   1       每一组进行8421码运算
    ----------
    八进制:141
  • 二进制转十六进制

1.运算规则:
    把二进制的每四位一组合,然后对每四位用8421码进行计算,最后拼接到一起
    原因:因为1111,的值是15, 再大1满16了就需要往进位了。 
    
2.举例:把二进制11001110转换为十六进制数据
    0110 0001       二进制每四位一组合
    6    1          每一组进行8421码运算
    ----------
    十六进制:61
    
3.练习:把111100转换为十六进制
    0011 1100
    3    12     由于十六进制中有a,b,c,d,e,f分别表示10,11,12,13,14,15
    -----------
    十六进制:3c

1.5 不同进制在Java程序中的书写格式

System.out.pirntln('a'+1); //98
System.out.pirntln(0b01100001); //97
System.out.pirntln(0141); //97
System.out.pirntln(0x61); //97

二、数据类型详解

数据类型是用来规定变量存储什么类型的数据

比如int a = 10; 这里的int就是限制变量只能存储整数; 除了int这种数据类型Java还提供了很多其他的数据类型。Java的数据类型整体上来说分为两大类: 基本数据类型引用数据类型

基本数据类型一共有4类8种,每一种数据类型占用的内存空间不一样,能够表示的数据范围也不一样。如下图所示

需要我们注意的是,随便写一个整数或者小数的字面量,它也是有默认数据类型的

- 比如23,它默认就为int类型;如果加上后缀L,则为long类型;
- 比如23.8,它默认为double类型;如果加上后缀F,则为float类型;

下面定义各种类型的变量,将这8种基本数据类型都用一下。

public class TypeDemo1 {
    public static void main(String[] args) {
        // 目标:掌握8种基本数据类型,用来定义变量。
        // 1、整型
        byte number = 98;
        System.out.println(number);
​
        short number2 = 9000;
​
        int number3 = 12323232; // 默认
​
        // 注意:随便写一个整型字面量,默认是int类型的,73642422442424虽然没有超过long的范围,但是它超过了本身int的范围了。
        // 如果希望随便写一个整型字面量是long类型的,需要在其后面加上L/l
        long number4 = 73642422442424L;
​
        // 2、浮点型
        //注意:
        //随便写一个小数字面量,默认当成double类型对待的,
        //如果希望这个小数是float类型的,需要在后面加上:F/f
        float score1 = 99.5F;
        double score2 = 99.8; // 默认定义方案。
​
        // 3、字符型
        char ch1 = 'a';
        char ch2 = '中';
        char ch3 = '国';
​
        // 4、布尔型
        boolean b1 = true;
        boolean b2 = false;
​
        // 引用数据类型:String.
        // String代表的是字符串类型,定义的变量可以用来记住字符串。
        String name = "黑马";
        System.out.println(name);
    }
}

三、数据类型转换

3.1 自动类型转换

类型转换的形式总体分为2种,一种是自动类型转换,一种是强制类型转换。 

  • 什么是自动类型转换呢?

答:自动类型转换指的是,数据范围小的变量可以直接赋值给数据范围大的变量
    byte a = 12; 
    int b = a; //这里就发生了自动类型转换(把byte类型转换int类型)
  • 自动类型转换的原理是怎样的?

答:自动类型转换其本质就是在较小数据类型数据前面,补了若干个字节

除了byte和int之间的转换之外,其他类型也可以转换,转换顺序如下图所示

下面我们通过代码演示一下,自动类型转换的各种形式。

public class TypeConversionDemo1 {
    public static void main(String[] args) {
        // 目标:理解自动类型转换机制。
        byte a = 12;
        int b = a; // 发生了自动类型转换了
        System.out.println(a);
        System.out.println(b);
​
        int c = 100; // 4
        double d = c;// 8 发生了自动类型转换了
        System.out.println(d);
​
        char ch = 'a'; // 'a' 97 => 00000000 01100001
        int i = ch; // 发生了自动类型转换了 =>  00000000 00000000  00000000 01100001
        System.out.println(i);
    }
}

  • 表达式的自动类型转换

自动类型转换还有另外一种形式,就是表达式的自动类型转换。所谓表达式指的是几个变量或者几个数据一起参与运算的式子。

如果同一个表达式中,出现不同类型的变量或者数据一起运算,这种情况下运算结果是一个什么数据类型呢?需要遵守下面的两条运算规则:

1.多种数据类型参与运算,其结果以大的数据类型为准
2.byte,short,char 三种类型数据在和其他类型数据运算时,都会转换为int类型再运算

public class TypeConversionDemo2 {
    public static void main(String[] args) {
        // 目标:掌握表达式的自动类型转换机制。
        byte a = 10;
        int b = 20;
        long c = 30;
        long rs = a + b + c;
        System.out.println(rs);
​
        double rs2 = a + b + 1.0;
        System.out.println(rs2);
        
        byte i = 10;
        short j = 30;
        int rs3 = i + j;
        System.out.println(rs3);
​
        // 面试笔试题: 即使两个byte运算,结果也会提升为int
        byte b1 = 110;
        byte b2 = 80;
        int b3 = b1 + b2;
        System.out.println(b3);
    }
}

3.2 强制类型转换

  • 什么是强制类型转换

但是你强行将范围大的数据,赋值给范围小的变量也是可以的,这里就需要用到强制类型转换。下面是强制类型转换的格式

目标数据类型  变量名  =  (目标数据类型)被转换的数据;

下面是强制类型转换的代码演示

public class TypeConversionDemo3 {
    public static void main(String[] args) {
        // 目标:掌握强制类型转换。
        int a = 20;
        byte b = (byte) a;  // ALT + ENTER 强制类型转换。
        System.out.println(a);
        System.out.println(b);
​
        int i = 1500;
        byte j = (byte) i;
        System.out.println(j);
​
        double d = 99.5;
        int m = (int) d; // 强制类型转换
        System.out.println(m); // 丢掉小数部分,保留整数部分
    }
}
  • 强制类型转换的原理

    强制类型转换的原理,其实就是强行把前面几个字节砍掉,但是有数据丢失的风险

四、运算符

运算符就是参与运算的符号。Java提供的运算符有很多种,可以分为算术下面几种

  • 基本算术运算符

  • 自增自减运算符

  • 赋值运算符

  • 关系运算符

  • 逻辑运算符

  • 三元运算符

3.1 算术运算符

算术运算符有 + - * / % ,其中*表示乘法,/表示除法,%表示取余数

需要我们注意以下几点

/: 两个整数相除,结果也是一个整数
%: 表示两个数相除,取余数

需要我们注意的是:+符号除了用于加法运算,还可以作为连接符。+符号与字符串运算的时候是用作连接符的,其结果依然是一个字符串

下面通过代码演示一下各种算术运算符的运算效果

public class OperatorDemo1 {
    public static void main(String[] args) {
        // 目标:掌握基本的算术运算符的使用。
        int a = 10;
        int b = 2;
        System.out.println(a + b);
        System.out.println(a - b);
        System.out.println(a * b); // 20
        System.out.println(a / b); // 5
        System.out.println(5 / 2); // 2.5 ==> 2
        System.out.println(5.0 / 2); // 2.5
        int i = 5;
        int j = 2;
        System.out.println(1.0 * i / j); // 2.5
​
        System.out.println(a % b); // 0
        System.out.println(3 % 2); // 1
​
        System.out.println("---------------------------------------");
​
        // 目标2:掌握使用+符号做连接符的情况。
        int a2 = 5;
        System.out.println("abc" + a2); // "abc5"
        System.out.println(a2 + 5); //  10
        System.out.println("itheima" + a2 + 'a'); // "itheima5a"
        System.out.println(a2 + 'a' + "itheima"); // 102itheima
    }
}

3. 2 自增自减运算符

++读作自增,--读作自减; 运算规则如下

需要我们注意的是,自增自减只能对变量进行操作,不能操作字面量。具体使用时也分为两种情况,如下:

1.单独使用:++或者--放在变量前面没有区别
       int a =10; 
        a++;  //11
        --a;  //10
        System.out.println(a); //10
​
2.混合使用:++或者--放在变量或者前面运算规则稍有不通过
    //++在后:先做其他事情,再做自增和自减
    int a = 10;
    int b = a++; //等价于 int b = a; a++; 
​
    //++在前:先自增或者自减,再做其他运输
    int x = 10;
    int y = --x; //等价于x--; int y = x;  

下面通过代码演示一下++--的用法

public class OperatorDemo2 {
    public static void main(String[] args) {
        // 目标:掌握自增自减运算符的使用。
        int a = 10;
        // a++; // a = a + 1
        ++a;
        System.out.println(a);
​
        // a--; // a = a - 1
        --a;
        System.out.println(a);
​
        // 自增自减只能操作变量不能操作字面量的,会报错!
        //System.out.println(2++);
​
        System.out.println("--------------------------------------");
​
        int i = 10;
        int rs = ++i; // 先加后用
        System.out.println(rs);
        System.out.println(i);
​
        int j = 10;
        int rs2 = j++; // 先用后加
        System.out.println(rs2);
        System.out.println(j);
    }
}

3.3 赋值运算符

除了基本的赋值运算符,我们这里主要学习一下扩展的赋值运算符。有+= -= *= /= %=

我们以+=为例来看一下它的运算规则,其他的运算符运算同理分析即可

int a = 10;
//+=解析:在a原来记录值10的基础上累加5,将结果重新赋值给a; 
a+=5; 
//最终打印a的值为15
System.out.println(a); 

下面通过一个首发红包的例子给大家演示一下

public class OperatorDemo3 {
    public static void main(String[] args) {
        // 目标:掌握扩展赋值运算符的使用。
        // +=
        // 需求:收红包
        double a = 9.5;
        double b = 520;
        a += b;  // a = (double)(a + b);
        System.out.println(a);
​
        // -= 需求:发红包
        double i = 600;
        double j = 520;
        i -= j;  // i = (double)(i - j);
        System.out.println(i);
​
        int m = 10;
        int n = 5;
        // m *= n; // 等价形式: m = (int)(m * n)
        // m /= n; // 等价形式: m = (int)(m / n)
        m %= n;    // 等价形式: m = (int)(m % n)
        System.out.println(m);
    }
}

3.4 关系运算符

下图是每一种关系运算符的符号及作用,每一个关系运算符的结果都是false

下面通过代码来家演示一下,各种关系运算符的效果

public class OperatorDemo4 {
    public static void main(String[] args) {
        // 目标:掌握关系运算符的基本使用。
        int a = 10;
        int b = 5;
        boolean rs = a > b;
        System.out.println(rs);
​
        System.out.println(a >= b); // 要么a大于b,或者a等于b
        System.out.println(2 >= 2); // true
        System.out.println(a < b);
        System.out.println(a <= b); // false
        System.out.println(2 <= 2); // true
        System.out.println(a == b); // false
        System.out.println(5 == 5); // true
        
        // 注意了:判断是否相等一定是用 == ,=是用来赋值的。
        // System.out.println(a = b); 
        System.out.println(a != b); // true
        System.out.println(10 != 10); // false
​
        System.out.println(false ^ true ^ false);
    }
}
 

3.5 逻辑运算符

逻辑运算符是用来将多个条件放在一起运算,最终结果是true或者false

下面我们通过几个案例来演示一下逻辑运算符的使用

//需求1:要求手机必须满足尺寸大于等于6.95,且内存必须大于等于8.
//需求2:要求手机要么满足尺寸大于等于6.95,要么内存必须大于等于8.
public class OperatorDemo5 {
    public static void main(String[] args) {
        // 目标:掌握逻辑运算符的使用。
        // 需求:要求手机必须满足尺寸大于等于6.95,且内存必须大于等于8.
        double size = 6.8;
        int storage = 16;
        // 1、& 前后的条件的结果必须都是true ,结果才是true.
        boolean rs = size >= 6.95 & storage >= 8;
        System.out.println(rs);
​
        // 需求2:要求手机要么满足尺寸大于等于6.95,要么内存必须大于等于8.
        // 2、| 只要多个条件中有一个是true,结果就是true.
        boolean rs2 = size >= 6.95 | storage >= 8;
        System.out.println(rs2);
​
        // 3、!取反的意思
        System.out.println(!true); // false
        System.out.println(!false); // true
        System.out.println(!(2 > 1)); // false
​
        // 4、^ 前后条件的结果相同时返回false,不同时返回true.
        System.out.println(true ^ true); // false
        System.out.println(false ^ false); // false
        System.out.println(true ^ false); // true
        System.out.println(false ^ true); // true
​
        // 5、&& 左边为false,右边不执行。
        int i = 10;
        int j = 20;
        // System.out.println(i > 100 && ++j > 99);
        System.out.println(i > 100 & ++j > 99);
        System.out.println(j);
​
        // 6、|| 左边是true ,右边就不执行。
        int m = 10;
        int n = 30;
        // System.out.println(m > 3 || ++n > 40);
        System.out.println(m > 3 | ++n > 40);
        System.out.println(n);
    }
}

3.6 三元运算符

先认识一下三元运算符的格式:

关系表达式? 值1 : 值2;

三元运算的执行流程:首先计算关系表达式的值,如果关系表达式的值为true,则返回值1;如果关系表达式的值为false, 则返回值2;

如下图所示:判断学生的成绩是否>=60,如果为true,就考试通过;如果为false,就成绩不合格。

接下来通过代码来演示一下,目的是让大家掌握三元运算符的格式和执行流程。

public class OperatorDemo6 {
    public static void main(String[] args) {
        // 目标:掌握三元运算符的基本使用。
        double score = 58.5;
        String rs = score >= 60 ? "成绩及格" : "成绩不及格";
        System.out.println(rs);
​
        // 需求2:找出2个整数中的较大值,并输出。
        int a = 99;
        int b = 69;
        int max = a > b ? a : b;
        System.out.println(max);
​
        // 需求3:找3个整数中的较大值。
        int i = 10;
        int j = 45;
        int k = 34;
​
        // 找出2个整数中的较大值。
        int temp = i > j ? i : j;
        // 找出temp与k中的较大值。
        int max2 = temp > k ? temp : k;
        System.out.println(max2);
    }
}
​

3.7 运算优先级

如果你想要知道各个运算符的优先级,哪些先算哪些后算,可以参考下面这张图

从图中我们发现,&&运算比||运算的优先级高,所以&&和||同时存在时,是先算&&再算||;

比如下面的代码

//这里&&先算 相当于 true || false 结果为true
System.out.println(10 > 3 || 10 > 3 && 10 < 3); // true

在实际开发中,其实我们很少考虑运算优先级, 因为如果你想让某些数据先运算,其实加()就可以了,这样阅读性更高。

//有括号先算 相当于 true && false 结果为false
System.out.println((10 > 3 || 10 > 3) && 10 < 3); //false

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

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

相关文章

Https证书续签-acme.sh-腾讯云之DnsPod

ename 域名切换到 DnsPod 上面解析 可以先看下之前的 acme.sh 介绍文章然后再来次补充更多。 之前说过了 acme.sh 在阿里云下的使用。 这里做个后续补充 之前的域名是在 ename 上的 &#xff0c;为了自动续签切换到 DnsPod 上面解析 注意事项 可以把原来 ename 上的解析先导出…

Android全新UI框架之Jetpack Compose入门基础

Jetpack Compose是什么 如果有跨端开发经验的同学&#xff0c;理解和学习compose可能没有那么大的压力。简单地说&#xff0c;compose可以让Android的原生开发也可以使用类似rn的jsx的语法来开发UI界面。以往&#xff0c;我们开发Android原生页面的时候&#xff0c;通常是在xml…

【八股文面试】Java基础常见面试题总结(上)

Java基础常见面试题总结(上) Java有哪些特性 简单易学&#xff1b;面向对象&#xff08;封装&#xff0c;继承&#xff0c;多态&#xff09;&#xff1b;平台无关性&#xff08; Java 虚拟机实现平台无关性&#xff09;&#xff1b;支持多线程&#xff08; C 语言没有内置的多…

Springcloud:LiteFlow

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 一、LiteFlow简介 二、规则编排关键字及语法 1、THEN&#xff1a; 2、WHEN&#xff1a; 3、AND&#xff1a; 4、OR&#xff1a; 5、IF&#xff1a; 6、ELSE&…

手动代码实现神经网络

网络结构 第一层有13个神经元&#xff0c;第二层8个神经元&#xff0c;第三层是输出层&#xff1b;其中第一层的激活函数是relu&#xff0c;第二层是sigmoid 代码实现 # 导入库 import torch import torch.nn as nn from torch.nn import functional as F # 确定数据 torch…

使用IntelliJ IDEA查看接口的全部实现方法

在大型Java项目中&#xff0c;经常会使用接口和抽象类进行代码设计。为了更好地了解代码结构和功能&#xff0c;我们需要快速查看一个接口的所有实现类。IntelliJ IDEA提供了一些方便的方法来实现这一目标。 1. 点击查看接口的实现子类 在IDEA中&#xff0c;你可以轻松地查看…

swagger 内容信息与代码不一致,已解决

ApiModel是Swagger中的常用到的注解&#xff0c;检查下信息错误的实体类的ApiModel的value值是否一致&#xff0c;应该是写错了&#xff0c;是不是张冠李戴了

STM32 TIM2重映射

STM32定时器 文章目录 STM32定时器[TOC](文章目录) 前言一、问题分析二、代码 前言 最近想弄一个多路输出PWM&#xff0c;但是发现TIM2不能用&#xff0c;根据手册也对它进行重映射了&#xff0c;但是还是不能用&#xff0c;用示波器发现驱动能力比较弱&#xff0c;然后禁用jt…

博途PLC PID仿真(单容水箱液位高度控制)

单容水箱和双荣水箱的微分方程和数值求解,可以参考下面文章链接: https://rxxw-control.blog.csdn.net/article/details/131139432https://rxxw-control.blog.csdn.net/article/details/131139432这篇博客我们利用欧拉求解器在PLC里完成单容水箱的数学建模。PLC也可以和MATL…

【笔记】【算法设计与分析 - 北航童咏昕教授】绪论

算法设计与分析 - 北航童咏昕教授 文章目录 算法的定义定义性质 算法的表示自然语言编程语言伪代码 算法的分析算法分析的原则渐近分析 算法的定义 定义 给定计算问题&#xff0c;算法是一系列良定义的计算步骤&#xff0c;逐一执行计算步骤即可得预期的输出。 性质 有穷性确…

运维07:堡垒机

什么是跳板机 跳板机就是一台服务器而已&#xff0c;运维人员在使用管理服务器的时候&#xff0c;必须先连接上跳板机&#xff0c;然后才能去操控内网中的服务器&#xff0c;才能登录到目标设备上进行维护和操作 开发小张 ---> 登录跳板机 ---> 再登录开发服务器 测试…

vue3 用xlsx 解决 excel 低版本office无法打开问题

需求背景解决思路解决效果将json导出为excel将table导为excel导出样式 需求背景 原使用 vue3-json-excel &#xff0c;导致在笔记本office环境下&#xff0c;出现兼容性问题 <vue3-json-excel class"export-btn" :fetch"excelGetList" :fields"js…

Aster实现一台电脑当两台使——副屏搭配键鼠

前言&#xff1a;笔者每年回家&#xff0c;都面临着想要和小伙伴一起玩游戏&#xff0c;但小伙伴没有电脑/只有低配电脑的问题。与此同时&#xff0c;笔者自身的电脑是高配置的电脑&#xff0c;因此笔者想到&#xff0c;能否在自己的电脑上运行游戏&#xff0c;在小伙伴的电脑上…

Code-Audit(代码审计)习题记录

介绍&#xff1a; 自己懒得搭建靶场了&#xff0c;靶场地址是 GitHub - CHYbeta/Code-Audit-Challenges: Code-Audit-Challenges为了方便在公网练习&#xff0c;可以随地访问&#xff0c;本文所有的题目均来源于网站HSCSEC-Code Audit 1、习题一 题目内容如下&#xff1a; 1…

2024pytest自动化测试框架学习(三)

在自动化测试中我们经常会针对某些测试方法编写前置测试数据&#xff0c;当测试方法执行完毕后再清理这些测试数据。之前我们接触的unittest框架中&#xff0c;使用setUp、tearDown方法来解决前置数据、后置数据销毁的问题。pytest为我们提供了更加强大灵活的fixtrue来完成该实…

《Solidity 简易速速上手小册》第8章:高级 Solidity 概念(2024 最新版)

文章目录 8.1 高级数据类型和结构8.1.1 基础知识解析更深入的理解实际操作技巧 8.1.2 重点案例&#xff1a;构建一个去中心化身份系统案例 Demo&#xff1a;创建去中心化身份系统案例代码DecentralizedIdentityContract.sol 测试和验证拓展案例 8.1.3 拓展案例 1&#xff1a;管…

MedicalGPT 训练医疗大模型,实现了包括增量预训练、有监督微调、RLHF(奖励建模、强化学习训练)和DPO(直接偏好优化)

MedicalGPT 训练医疗大模型&#xff0c;实现了包括增量预训练、有监督微调、RLHF(奖励建模、强化学习训练)和DPO(直接偏好优化)。 MedicalGPT: Training Your Own Medical GPT Model with ChatGPT Training Pipeline. 训练医疗大模型&#xff0c;实现了包括增量预训练、有监督微…

我为什么不喜欢关电脑?

程序员为什么不喜欢关电脑&#xff1f; 你是否注意到&#xff0c;程序员们似乎从不关电脑&#xff1f;别以为他们是电脑上瘾&#xff0c;实则是有他们自己的原因&#xff01;让我们一起揭秘背后的原因&#xff0c;看看程序员们真正的“英雄”本色&#xff01; 一、上大学时。 …

AP5216 降压恒流 全亮 半亮9W 车灯手电筒 性价比方案

AP5216 是一款 PWM工作模式, 高效率、外 围简单、内置功率管&#xff0c;适用于5V&#xff5e;100V输入的高 精度降压 LED 恒流驱动芯片。输出功率可达 9W&#xff0c;电流 1.0A。AP5216 可实现全亮/半亮功能切换&#xff0c;通过 MODE 切换&#xff1a;全亮/半亮 模式。AP5216…