「计算机组成原理」数据的表示和运算(上)

news2024/9/30 9:19:07

文章目录

  • 一、进位计数制
    • 1.1 其他进制转十进制
    • 1.2 十进制转其他进制
    • 1.3 二进制、八进制和十六进制
    • 1.3 真值和机器数
  • 二、BCD码
    • 2.1 8421码
    • 2.2 余3码
    • 2.3 2421码
  • 三、整数的表示和运算
    • 3.1 无符号整数
      • 3.1.1 无符号整数的表示
      • 3.1.2 无符号整数的运算
    • 3.2 有符号整数
      • 3.2.1 有符号整数的表示
      • 3.2.2 有符号整数的补码运算
  • 四、定点小数的表示和运算

一、进位计数制

不同的进制,每一位的位权不一样。如数字 K n K n − 1 . . . K 2 K 1 K 0 . K − 1 K − 2 . . . K − m K_{n}K_{n-1}...K_{2}K_{1}K_{0}.K_{-1}K_{-2}...K_{-m} KnKn1...K2K1K0.K1K2...Km,以小数点为分界线,小数点以前的n+1位数字的位权从右到左依次是 r 0 , r 1 , . . . , r n − 1 r^{0},r^{1},...,r^{n-1} r0,r1,...,rn1;小数点以后的m位数字的位权从左至右依次是 r − 1 , r − 2 , . . . , r − m r^{-1},r^{-2},...,r^{-m} r1,r2,...,rm.其中r是该数字的基数:不同进制的基数不同,十进制每一位可能出现的字符是0~9共10个,则十进制的基数是10;二进制每一位可能出现的字符是0或1,则二进制的基数是2.

1.1 其他进制转十进制

任意进制要想转换为十进制,只需要将该数字的每一位与本位的位权相乘,再将结果相加即可。

二进制转为十进制: 101.1 = 1 × 2 2 + 0 × 2 1 + 1 × 2 0 + 1 × 2 − 1 = 5.5 101.1 = 1\times2^{2}+0\times2^{1}+1\times2^{0}+1\times2^{-1}=5.5 101.1=1×22+0×21+1×20+1×21=5.5
八进制转为十进制: 5.4 = 5 × 8 0 + 4 × 8 − 1 = 5.5 5.4 = 5\times8^{0}+4\times8^{-1}=5.5 5.4=5×80+4×81=5.5
十六进制转为十进制: 5.8 = 5 × 1 6 0 + 8 × 1 6 − 1 = 5.5 5.8=5\times16^{0}+8\times16^{-1}=5.5 5.8=5×160+8×161=5.5

1.2 十进制转其他进制

十进制转换为其他进制要分为小数点前后的整数部分和小数部分。对于整数部分使用除基取余的方法,先取得“余”是整数的低位;对于小数部分使用乘基取整的方法,先取的“整”是小数的高位
对于任意的r进制数字要转换为十进制: K n K n − 1 . . . K 2 K 1 K 0 . K − 1 K − 2 . . . K − m = K n × r n + K n − 1 × r n − 1 + . . . + K 2 × r 2 + K 1 × r 1 + K 0 × r 0 + K − 1 × r − 1 + K − 2 × r − 2 + . . . + K − m × r − m K_{n}K_{n-1}...K_{2}K_{1}K_{0}.K_{-1}K_{-2}...K_{-m}=K_{n}\times r^{n}+K_{n-1}\times r^{n-1}+...+K_{2}\times r^{2}+K_{1}\times r^{1}+K_{0}\times r^{0}+K_{-1}\times r^{-1}+K_{-2}\times r^{-2}+...+K_{-m}\times r^{-m} KnKn1...K2K1K0.K1K2...Km=Kn×rn+Kn1×rn1+...+K2×r2+K1×r1+K0×r0+K1×r1+K2×r2+...+Km×rm.
其整数部分若除以基数即 K n × r n + K n − 1 × r n − 1 + . . . + K 2 × r 2 + K 1 × r 1 + K 0 × r 0 r = K n × r n − 1 + K n − 1 × r n − 2 + . . . + K 2 × r 1 + K 1 × r 0 . . . . . . K 0 \frac{K_{n}\times r^{n}+K_{n-1}\times r^{n-1}+...+K_{2}\times r^{2}+K_{1}\times r^{1}+K_{0}\times r^{0}}{r}=K_{n}\times r^{n-1}+K_{n-1}\times r^{n-2}+...+K_{2}\times r^{1}+K_{1}\times r^{0}......K_{0} rKn×rn+Kn1×rn1+...+K2×r2+K1×r1+K0×r0=Kn×rn1+Kn1×rn2+...+K2×r1+K1×r0......K0,其中 K 0 K_{0} K0为余数,其余的为商,并且 K 0 < r K_{0}<r K0<r,不难看出 K 0 K_{0} K0就是该r进制数整数部分的最低位,将商继续除以基数r就可以依次获得高位。
其小数部分若乘以基数即 K − 1 × r − 1 + K − 2 × r − 2 + . . . + K − m × r − m × r = K − 1 × r 0 + K − 2 × r − 1 + . . . + K − m × r − m + 1 K_{-1}\times r^{-1}+K_{-2}\times r^{-2}+...+K_{-m}\times r^{-m} \times r=K_{-1}\times r^{0}+K_{-2}\times r^{-1}+...+K_{-m}\times r^{-m+1} K1×r1+K2×r2+...+Km×rm×r=K1×r0+K2×r1+...+Km×rm+1,由于r是大于1的,则r的负指数必然小于1,因此该结果的整数部分为 K − 1 K_{-1} K1,这样就得到了小数部分的第一位,以此类推可以得到更低的几位。
这里需要注意的是,十进制转换为其他进制的时候,想要得到目标进制整数部分的时候需要除法操作取余数,每次的被除数是上一次的商,这样算下去一定会算到商为0,此时整数部分的计算也就完成了。而小数部分需要进行乘法操作,每次都要用小数部分与基数相乘取积的整数部分,直到积为0为止,但是有时候我们永远都无法乘到0如0.3转换为二进制,几次乘法之后会发现开始了循环导致永远也乘不到严格的0,这也就导致了小数部分不精确,因此十进制可能无法严格转换为其他进制

十进制转换为二进制:75.3
整数部分: 75 2 = 37...1 \frac{75}{2}=37...1 275=37...1
      37 2 = 18...1 \frac{37}{2}=18...1 237=18...1
      18 2 = 09...0 \frac{18}{2}=09...0 218=09...0
      09 2 = 04...1 \frac{09}{2}=04...1 209=04...1
      04 2 = 02...0 \frac{04}{2}=02...0 204=02...0
      02 2 = 01...0 \frac{02}{2}=01...0 202=01...0
      01 2 = 00...1 \frac{01}{2}=00...1 201=00...1
整数部分结果为1001011

小数部分: 0.3 × 2 = 0.6 = 0 + 0.6 0.3\times2=0.6=0+0.6 0.3×2=0.6=0+0.6
      0.6 × 2 = 1.2 = 1 + 0.2 0.6\times2=1.2=1+0.2 0.6×2=1.2=1+0.2
      0.2 × 2 = 0.4 = 0 + 0.4 0.2\times2=0.4=0+0.4 0.2×2=0.4=0+0.4
      0.4 × 2 = 0.8 = 0 + 0.8 0.4\times2=0.8=0+0.8 0.4×2=0.8=0+0.8
      0.8 × 2 = 1.6 = 1 + 0.6 0.8\times2=1.6=1+0.6 0.8×2=1.6=1+0.6
      . . . . . . ...... ......
小数部分结果为011001…

则75.3转换为二进制为1001011.01001…

1.3 二进制、八进制和十六进制

二进制与八进制和十六进制可以快速转换。三位二进制可以组成一位八进制;四位二进制可以组成一位十六进制。若二进制位数不够,小数点前需高位补0;小数点后需低位补0.

二进制 —> 八进制:1111000010.011010 —> 001 111 000 010 . 011 010 —> 1702.32
二进制 —> 十六进制:1111000010.01101000 —> 0011 1100 0010 . 0110 1000 —> 3C2.68
八进制 —> 二进制:251.5O —> 010 101 001 . 101
十六进制 —> 二进制:AE86.1H —> 1010 1110 1000 0110 . 0001

1.3 真值和机器数

真值就是我们平常习惯使用的十进制数字,机器数就是这些我们惯用的十进制数字在计算机中存储的二进制形式,正负号在机器数中是需要被数字化的,0代表整数,1代表负数。

真值     机器数
+15      0 1111
-08       1 1000

二、BCD码

BCD(Binary-Coded Decimal)码就是用二进制编码的十进制,他分为3种,分别是8421码、余3码和2421码。其中8421码和2421码为有权码,余3码为无权码。这三种编码方式都是用4位二进制数字表示1位十进制,只不过映射方式不同。

2.1 8421码

8421码与十进制的映射关系如下:

0123456789
0000000100100011010001010110011110001001
由于4位二进制可以表示16种状态,而十进制只需要10种,因此8421码只需要0000~1001这10种状态即可表示任意单个十进制数字。而1010~1111这6种状态是不对应任何十进制字符的,这就会产生一种情况:用两个合法范围的8421编码的数字相加,得到的和超出了合法范围,如:

0101+1000=1101,显然1101这个编码无法对应任何一个十进制数字。这个时候需要把非法结果+0110修正为合法结果。上述结果1101+0110=1 0011,再将高位补全得到0001 0011,这样就可以和表中一一对应。
此处的修正方法为计算机需要使用的方法,我们平常计算的时候可以直接用十进制算出结果,然后将每一个十进制位对应到8421编码即可。之所以+110即6是因为8421码从1010开始就无法对应十进制位,此时真值为10,再加上6便可以向前进位而保留低位。

2.2 余3码

余3码就是在8421码的基础上,每一个编码+0011,其与十进制映射关系如下:

0123456789
0011010001010110011110001001101010111100

2.3 2421码

2421码每一位的权值由高到低依次是2、4、2、1,其与十进制映射关系如下:

0123456789
0000000100100011010010111100110111101111

在2421码中,规定0~4的编码以0开头,5~9的编码以1开头。若不遵守这个规定,则此编码会有歧义。如十进制的5,按照2421的权值来看,可以有0101和1011两种编码方式,这显然是不应该出现的。

三、整数的表示和运算

3.1 无符号整数

3.1.1 无符号整数的表示

无符号整数的表示有如下特征:

  1. 所有二进制位都是数值位,没有符号位
  2. 第i位的位权是 2 i − 1 2^{i-1} 2i1
  3. n bit无符号整数可表示的范围是 0 ~ 2 n − 1 0~2^{n}-1 02n1,超过这个范围则会发生溢出
  4. 可以表示的最小数字是全0,可以表示的最大数字是全1

3.1.2 无符号整数的运算

无符号整数的加法运算只需要从最低位开始,按位相加,向高处进位。而无符号整数的减法运算
需要先将减法转换为加法,然后按照加法规则相加即可。这样做一方面是因为加法运算的电路简单且成本低,另一方面可以让计算机用同样的方法处理运算,计算机擅长做重复的事情。
如A-B需要将其转化为等价的加法形式A+(-B),此处的-B不是前者B的相反数,而是通过将减数B全部位按位取反,末位+1这个规则得到的。

A:99 —> 01100011
B:09 —> 00001001
计算A-B,先将“B”转换为“-B”:00001001 (按位取反)—> 11110110 (末位+1)—> 11110111
  0 1 1 0 0 0 1 1
+1 1 1 1 0 1 1 1
————————
1 0 1 0 1 1 0 1 0 = 90
舍去高位的1bit,得到结果01011010即90

3.2 有符号整数

3.2.1 有符号整数的表示

有符号数可以用原码、反码、补码和移码表示,其中移码只能表示整数。原码就是通过真值直接转换为二进制所得到的,只不过最高位是符号位,且符号位不能参与运算。用原码进行计算不方便,而补码可以很方便地进行运算,所以实际运算用的都是补码。
正数的原反补码是一样的
负数的反码需要将其原码的数值位按位取反,符号位保持不变,负数的补码需要在其反码的末位+1,这个过程同样适用于补码转原码。虽然负数的原反补码是通过变化得来的,但是它们的最高位即符号位不会发生变化,都能够正确的表示正负
对于负数来说,有一种快捷的从原码转变为补码的方式:从右往左找到第一个“1”,将这个“1”左边的所有数值位按位取反,符号位不变,就可以直接得到该原码的补码。同样也可以由此方法将补码转换为原码。

n+1 bit合法表示范围最大的数最小的数真值0的表示
带符号整数:原码 − ( 2 n − 1 ) ⩽ x ⩽ 2 n − 1 -(2^{n}-1)\leqslant x\leqslant 2^{n}-1 (2n1)x2n1 0 , 111...111 = 2 n − 1 0,111...111= 2^{n}-1 0,111...111=2n1 1 , 111...111 = − ( 2 n − 1 ) 1,111...111= -(2^{n}-1) 1,111...111=(2n1) [ + 0 ] 原 = 0 , 000...000 [+0]_{原}=0,000...000 [+0]=0,000...000
[ − 0 ] 原 = 1 , 000...000 [-0]_{原}=1,000...000 [0]=1,000...000
带符号整数:反码 − ( 2 n − 1 ) ⩽ x ⩽ 2 n − 1 -(2^{n}-1)\leqslant x\leqslant 2^{n}-1 (2n1)x2n1 0 , 111...111 = 2 n − 1 0,111...111= 2^{n}-1 0,111...111=2n1 1 , 111...111 = − ( 2 n − 1 ) 1,111...111= -(2^{n}-1) 1,111...111=(2n1) [ + 0 ] 反 = 0 , 000...000 [+0]_{反}=0,000...000 [+0]=0,000...000
[ − 0 ] 反 = 1 , 111...111 [-0]_{反}=1,111...111 [0]=1,111...111
带符号整数:补码 − 2 n ⩽ x ⩽ 2 n − 1 -2^{n}\leqslant x\leqslant 2^{n}-1 2nx2n1 0 , 111...111 = 2 n − 1 0,111...111= 2^{n}-1 0,111...111=2n1 1 , 000...000 = − 2 n 1,000...000= -2^{n} 1,000...000=2n [ 0 ] 补 = 0 , 000...000 [0]_{补}=0,000...000 [0]=0,000...000
真值0只有一种补码
带符号整数:移码 − 2 n ⩽ x ⩽ 2 n − 1 -2^{n}\leqslant x\leqslant 2^{n}-1 2nx2n1 1 , 111...111 = 2 n − 1 1,111...111= 2^{n}-1 1,111...111=2n1 0 , 000...000 = − 2 n 0,000...000= -2^{n} 0,000...000=2n [ 0 ] 移 = 1 , 000...000 [0]_{移}=1,000...000 [0]=1,000...000
真值0只有一种移码
无符号整数 0 ⩽ x ⩽ 2 n + 1 − 1 0\leqslant x\leqslant 2^{n+1}-1 0x2n+11 1111...111 = 2 n + 1 − 1 1111...111= 2^{n+1}-1 1111...111=2n+11 0000...000 = 0 0000...000= 0 0000...000=0 [ 0 ] 移 = 1 , 000...000 [0]_{移}=1,000...000 [0]=1,000...000

原码反码的合法表示范围完全相同,真值0都有2种形式;
补码移码的合法表示范围完全相同,比原码多表示一个负数,真值0只有1种形式。

8bit的机器数,用不同的方式解读的结果如图所示。可以看出移码和无符号数的机器数的绝对值越大,其真值就越大
在这里插入图片描述
不同码之间的转化如图所示:
在这里插入图片描述

3.2.2 有符号整数的补码运算

补码的加法运算按位相加即可,向高位进位,符号位参与运算

A:+19 —> 0,0010011 (原码)
B: -19 —> 1,0010011 (原码)
计算A+B:
直接使用原码运算:
 0 0 0 1 0 0 1 1
+1 0 0 1 0 0 1 1
————————
 1 0 1 0 0 1 1 0 = 166
显然这个结果是错误的。

A:+19 —> 0,0010011 (原码) —> 0,0010011(补码)
B: -19 —> 1,0010011 (原码) —> 1,1101101(补码)
使用补码运算:
 0 0 0 1 0 0 1 1
+1 1 1 0 1 1 0 1
————————
1 0 0 0 0 0 0 0 0 = 0
最高位溢出,保留低8位,得到了正确的结果0。

和无符号整数的减法一样,补码的减法运算也需要将减法转换为等价的加法,也就是将减数B的补码转换为-B的补码。转换规则和无符号整数B转换为-B的方法一样, [ B ] 补 [B]_{补} [B]全部位按位取反后+1,即可得到 [ − B ] 补 [-B]_{补} [B]
[ B ] 补 [B]_{补} [B]转换到 [ − B ] 补 [-B]_{补} [B]也有一种简单的算法:找到 [ B ] 补 [B]_{补} [B]最右边的“1”,将这个“1”左边的全部位按位取反即可得到 [ − B ] 补 [-B]_{补} [B]。(注意与前边负数的原码补码转换方法区别)

A:+19 —> 0,0010011(原码) —> 0,0010011(补码)
B: -19 —> 1,0010011(原码) —> 1,1101101(补码)
计算A-B,首先转换为A+(-B)
[ − B ] 补 = 00010011 [-B]_{补}=00010011 [B]=00010011
计算A+(-B):
 0 0 0 1 0 0 1 1
+0 0 0 1 0 0 1 1
————————
 0 0 1 0 0 1 1 0 = 38

四、定点小数的表示和运算

定点整数可以用原码、反码、补码和移码表示,定点小数可以用原反补码表示而不能用移码表示。
定点是指小数点的位置固定不变。在定点整数中,我们默认小数点在最低位的后边;在定点小数中,我们默认小数点在符号位和数值最高位之间。因此若需要位数扩展时,两者的扩展位置是不一样的:定点整数在高位扩展,定点小数在低位扩展
定点小数三种码之间的转换和定点整数三种码之间的转换是完全一致的,运算方法也与定点整数完全一致:加减法需要先转换为补码,减法要先转换为加法,这个转换也和定点整数是一样的。

n+1 bit合法表示范围最大的数最小的数真值0的表示
定点整数:原码 − ( 2 n − 1 ) ⩽ x ⩽ 2 n − 1 -(2^{n}-1)\leqslant x\leqslant 2^{n}-1 (2n1)x2n1 0 , 111...111 = 2 n − 1 0,111...111= 2^{n}-1 0,111...111=2n1 1 , 111...111 = − ( 2 n − 1 ) 1,111...111= -(2^{n}-1) 1,111...111=(2n1) [ + 0 ] 原 = 0 , 000...000 [+0]_{原}=0,000...000 [+0]=0,000...000
[ − 0 ] 原 = 1 , 000...000 [-0]_{原}=1,000...000 [0]=1,000...000
定点整数:反码 − ( 2 n − 1 ) ⩽ x ⩽ 2 n − 1 -(2^{n}-1)\leqslant x\leqslant 2^{n}-1 (2n1)x2n1 0 , 111...111 = 2 n − 1 0,111...111= 2^{n}-1 0,111...111=2n1 1 , 111...111 = − ( 2 n − 1 ) 1,111...111= -(2^{n}-1) 1,111...111=(2n1) [ + 0 ] 反 = 0 , 000...000 [+0]_{反}=0,000...000 [+0]=0,000...000
[ − 0 ] 反 = 1 , 111...111 [-0]_{反}=1,111...111 [0]=1,111...111
定点整数:补码 − 2 n ⩽ x ⩽ 2 n − 1 -2^{n}\leqslant x\leqslant 2^{n}-1 2nx2n1 0 , 111...111 = 2 n − 1 0,111...111= 2^{n}-1 0,111...111=2n1 1 , 000...000 = − 2 n 1,000...000= -2^{n} 1,000...000=2n [ 0 ] 补 = 0 , 000...000 [0]_{补}=0,000...000 [0]=0,000...000
真值0只有一种补码
定点小数:原码 − ( 1 − 2 − n ) ⩽ x ⩽ 1 − 2 − n -(1-2^{-n})\leqslant x\leqslant 1-2^{-n} (12n)x12n 0.111...111 = 1 − 2 − n 0.111...111= 1-2^{-n} 0.111...111=12n 1.111...111 = − ( 1 − 2 − n ) 1.111...111= -(1-2^{-n}) 1.111...111=(12n) [ + 0 ] 原 = 0.000...000 [+0]_{原}=0.000...000 [+0]=0.000...000
[ − 0 ] 原 = 1.000...000 [-0]_{原}=1.000...000 [0]=1.000...000
定点小数:反码 − ( 1 − 2 − n ) ⩽ x ⩽ 1 − 2 − n -(1-2^{-n})\leqslant x\leqslant 1-2^{-n} (12n)x12n 0.111...111 = 1 − 2 − n 0.111...111= 1-2^{-n} 0.111...111=12n 1.111...111 = − ( 1 − 2 − n ) 1.111...111= -(1-2^{-n}) 1.111...111=(12n) [ + 0 ] 反 = 0.000...000 [+0]_{反}=0.000...000 [+0]=0.000...000
[ − 0 ] 反 = 1.111...111 [-0]_{反}=1.111...111 [0]=1.111...111
定点小数:补码 − 1 ⩽ x ⩽ 1 − 2 − n -1\leqslant x\leqslant 1-2^{-n} 1x12n 0.111...111 = 1 − 2 − n 0.111...111= 1-2^{-n} 0.111...111=12n 1.000...000 = − 1 1.000...000= -1 1.000...000=1 [ 0 ] 补 = 0 , 000...000 [0]_{补}=0,000...000 [0]=0,000...000
真值0只有一种补码

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

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

相关文章

聚观早报 | 微信也要下场做“外卖”?;《羊了个羊》营收破亿

今日要闻&#xff1a;微信也要下场做“外卖”&#xff1f;;《羊了个羊》营收破亿&#xff1b;苹果将新XR头显上市推迟至6月&#xff1b;“交个朋友”被爆欠薪暴力裁员&#xff1f;&#xff1b;微软解释ChatGPT Bing AI推出速度缓慢的原因微信也要下场做“外卖”&#xff1f;腾讯…

C语言返回类型为指针的一些经典题目(上)

大家好&#xff0c;今天和大家分享一下C语言返回类型为指针的一些重要题目&#xff0c;看完你会恍然大悟。原来我对指针的了解还停留在指针只是一个地址的位置上&#xff0c;看完后你会对指针的用法进一步得到提升。目录一.关于指针类型的基础概念二.题目剖析一.关于指针类型的…

Java反序列化漏洞——CommonsCollections6链分析

一、前因因为在jdk8u71之后的版本中&#xff0c;sun.reflect.annotation.AnnotationInvocationHandler#readObject的逻辑发生了变化&#xff0c;导致CC1中的两个链条都不能使用&#xff0c;所有我们需要找一个在高版本中也可用的链条。/* Gadget chain: java.io.ObjectInputStr…

35岁危机

人们对社会的期望是不断变更的&#xff0c;无论拥有高技能的人还是普通的白领&#xff0c;这种期望都让人们不断地励磁进步&#xff0c;以期实现自己的理想。但是&#xff0c;当人们达到35岁时&#xff0c;多数人就会陷入一种状态&#xff0c;这被称之为“35岁危机”。 在35岁…

时间轮和时间堆管理定时器

高性能定时器 时间轮 由于排序链表定时器容器有这样一个问题&#xff1a;添加定时器的效率偏低。而即将介绍的时间轮则解决了这个问题。一种简单的时间轮如下所示。 如图所示的时间轮内&#xff0c;指针指向轮子上的一个slot&#xff08;槽&#xff09;&#xff0c; 它以恒定…

Linux操作系统-线程互斥,线程同步,生产者消费者模型

线程互斥线程互斥及相关概念线程互斥&#xff08;Mutual Exclusion&#xff09;是指在多线程环境下&#xff0c;同一时刻只能有一个线程访问共享资源&#xff0c;以避免对该资源的不正确访问&#xff0c;造成数据不一致等问题。例如&#xff0c;如果有多个线程都要同时对同一个…

web端元素各种尺寸示意图

1.偏移尺寸 offsetHeight 元素在垂直方向上占用的尺寸(height,border,水平滚动条高度) offsetWidth 元素在垂直方向上占用的尺寸(height,border,水平滚动条高度) offsetTop 元素上边框外侧距离包含元素上边框内侧的尺寸 offsetLeft 元素左边框外侧距离包含元素左边框内侧的尺寸…

Python-第八天 Python文件操作

Python-第八天 Python文件操作一、文件的编码1. 什么是编码&#xff1f;2. 为什么需要使用编码&#xff1f;二、文件操作1.文件的操作步骤2. 打开文件3.mode常用的三种基础访问模式4.关闭文件三、文件的读取1.文件对象有如下读取方法&#xff1a;2.练习&#xff1a;单词计数三、…

nextTick 的使用和原理(面试题)

答题思路&#xff1a; nextTick 是做什么的&#xff1f;为什么需要它&#xff1f;开发时什么时候使用&#xff1f;介绍一下如何使用nextTick原理解读&#xff0c;结合异步更新和nextTick生效方式 1. nextTick是做什么的&#xff1f; nextTick是等待下一次DOM更新刷新的工具方法…

电子电器架构——怎样在请求/响应 ID确定的情况下修改发送FD 的CAN ID?

我是穿拖鞋的汉子,魔都中一个坚持长期主义的工程师! 老规矩,分享一段喜欢的文字,避免成为高知识低文化的人: 能不传话,最好不要传话;能不套话,最好不要套话;能不涉入“背后的批评”,最好不要涉入。让自己像沙滩,多大的浪来了,也是轻抚着沙滩,一波波地退去。而不要…

Ubuntu 快速切换到指定目录

现有以下场景&#xff0c;假设我在本地有/home/pc/Downloads/temp/Project 目录&#xff0c;我想快速在终端进入Project目录&#xff0c;需要怎么操作呢 文件管理器 由于我知道这个目录在哪个位置&#xff0c;那我就可以打开文件管理器&#xff0c;进入到这个目录&#xff0c…

关于数据治理ChatGPT是如何回答的?

这两天你的朋友圈是不是被火爆全网的ChatGPT霸屏了&#xff1f;你是不是已经迫不及待感受过ChatGPT带来的惊喜&#xff1f;那你知道ChatGPT是什么吗&#xff1f;面对掀起的一波话题热潮&#xff0c;好奇使然&#xff0c;小编去特别关注了一下最近火热的ChatGPT&#xff0c;看看…

基于Spring cloud搭建oauth2

1&#xff0c;OAuth2.0简介 OAuth&#xff08;开发授权&#xff09;是一个开放标准&#xff0c;允许用户授权第三方应用访问他们存储在另外的服务提供者上的信息&#xff0c;而不需要将用户名和密码提供给第三方应用或分享他们数据的所有内容。 OAuth2.0是OAuth的延续&#xf…

预告| 亮点抢先看!第四届OpenI/O启智开发者大会主论坛24日启幕!

2023年2月24日至25日&#xff0c;第四届OpenI/O启智开发者大会将在深圳隆重举行。“算网筑基、开源启智、AI赋能”作为今年大会的主题&#xff0c;吸引了全球业界关注的目光。大会集结中国算力网资源基座、开源社区治理及AI开源生态建设、国家级开放创新应用平台、NLP大模型等前…

2023年云计算的发展趋势如何?还值得学习就业吗?

一、2023年云计算的发展将迎来新篇章 随着政策的正式放开&#xff0c;2023年的经济开始慢慢复苏&#xff0c;云计算在疫情期间支撑了复工复产&#xff0c;那么在今年对于云计算发展的限制将进一步的放开。Gartner的数据显示&#xff0c;到2023年&#xff0c;全球公共云支出将达…

MybatisPlus------条件构造器Wrapper以及QueryWrapper用法(七)

MybatisPlus------条件构造器Wapper&#xff08;七&#xff09; Wrapper:条件构造器抽象类&#xff0c;最顶端父类 AbstarctWrapper&#xff1a;用于查询条件封装&#xff0c;生成sql的where条件。 QueryWrapper&#xff1a;查询条件封装&#xff08;可以用于查询、删除&#x…

Java必备小知识点1

Java程序类型: Applications和AppletApplications:是指在计算机操作系统中运行的程序。是完整的程序&#xff0c;能独立运行。被编译后&#xff0c;用普通的Java解释器就可以使其边解释边执行。必定含有一个main方法&#xff0c;程序执行时&#xff0c;首先寻找main方法&#x…

IDEA中如何配置SpringBoot项目多实例不同端口运行

1 问题场景 我们在进行新项目开发的时候&#xff0c; 可能做完一个新的模块功能并自测通过之后&#xff0c; 我们希望测试人员能帮我跑一些单元测试用例来进行测试验证&#xff0c; 但是我们又需要在此基础上技术开发新的功能&#xff0c; 这是我们就需要在我们的开发PC上同时…

Prometheus监控案例-kube-state-metrics

kube-state-metrics组件介绍 kube-stste-metrics项目地址&#xff1a;https://github.com/kubernetes/kube-state-metrics kube-stste-metrics是一个简单的组件&#xff0c;通过监听API Server生成有关资源对象的状态指标&#xff08;例如Deployment、Pod、Node等&#xff09…

HiEV洞察 | 卖一台亏半台,激光雷达第一股禾赛隐忧仍在

作者 | 感知君Alex 编辑 | 王博2月9日晚&#xff0c;禾赛在万众瞩目下登陆纳斯达克&#xff0c;发行价19美元每股&#xff0c;首日涨超11%&#xff0c;市值超过Luminar&#xff0c;登顶全球市值最高的激光雷达公司。 随后两个交易日&#xff0c;其股价均有不同程度的涨幅&#…