一些数学符号的解释:

求和符号:∑5i=0xi=x0+x1+x2+x3+x4+x5 \sum_{i=0}^5x^i=x^0+x^1+x^2+x^3+x^4+x^5

x⃗  \vec {x} 表示向量x ,一组1和0,例如[1010 1100]。

xix_i此位向量中第i个位。 向量中最右边的位为第0位,向左依次加1.

modmod 取模运算 ,求余数运算。 1 mod 2=1 // 3 mod 2=1。在二进制系统中,一个位向量 mod 2k2^k 相当于将此向量截断到k位 。 例如 [1111 1111] (十进制为255)mod 232^3=[0000 0111](十进制为7)。

111100002=240101111 0000_2=240_{10} 右下角下标表示此数的进制表示格式,例如2为二进制。

B2U。 Binary to Unsigned的简写,既是将二进制位模式通过无符号编码进行解释,转换。此外还有B2T,U2T 之类。

⌞x⌟\llcorner x \lrcorner x向下舍入。 ⌞6.12⌟=6\llcorner 6.12 \lrcorner=6。

⌜x⌝\ulcorner x \urcorner x向上舍入。 ⌜6.12⌝=7\ulcorner 6.12 \urcorner=7。


二进制既是将不同长度的“位”(一个1或0)组合在一起再加上不同的解释以赋予含义。同样的机器代码[ 1000 1010] 在不同的编码模式下的意义是不同的。
这里分析一下无符号编码,既是C语言中的unsigned int, 与补码编码,C语言中的 int。通过五个方面进行学习:1,将位模式转换为两种编码格式下的值的过程的函数缩写,2,位向量在两种编码格式下的取值范围,3,位向量在两种编码格式下的扩展方法,4,理解溢出这个现象,并理解如何通过取余运算正确算出溢出后的值,5,了解通过移位替代乘除法这项优化是如何实现的。
最后了解一个变量在两种格式之下的转换发生了什么,以及计算机如何将1和0转换为字符。

1,无符号编码

–函数缩写

如果有位向量 x⃗ 既[xw−1,xw−2,...,x1,x0]\vec x 既 [x_{w-1},x_{w-2},...,x_1,x_0] ,则在无符号编码中它的十进制值为:

B2Uw(x⃗ )=∑i=0w−1xi2i(公式1)

B2U_w( \vec x)=\sum_{i=0}^{w-1}x_i2^i (公式1)

例如:把[01011110]转换为十进制数值
1,加下标:07160514131211000_71_60_51_41_31_21_10_0
2,下标转化为2的幂并乘以相应的位,然后相加:
0∗27+1∗26+0∗25+1∗24+1∗23+1∗22+1∗21+0∗20=940*2^7+1*2^6+0*2^5+1*2^4+1*2^3+1*2^2+1*2^1+0*2^0=94

–取值范围

假设有一个8位的位向量,最小值无疑是0,它的最大值是 [1111 1111],通过上述公式我们知道它在无符号编码中的十进制值为2的9次方加2的8次方依次到2的0次方,这个2的n的递减次幂的和等于2的n+1次方减1,既2的10次方减1。
所以位向量 [xw−1,xw−2,...,x1,x0][x_{w-1},x_{w-2},...,x_1,x_0] 的取值范围为:

0至2w−1

0至2^w-1

–扩展

一个通过无符号编码来解释的位向量如果想在不影响它所代表的值的情况下扩展它的位,它的长度,就得在它的最高位之前添加0,这种方法称为零扩展。

例如:将一个较小的无符号数据类型 unsigned short ( 假设为[1111 1100 0011 1111])转换到一个较大的类型 unsigned
在最底层此变量抓换为位向量后将会变为 [0000 0000 0000 0000 1111 1100 0011 1111]

–溢出

已知 w位的位向量的最大值为2w−12^w-1。如果编程过程中,赋予它的值超过了此最大值,实际值将会减掉2w2^w。例如,某个变量a的位向量为 [1111 1111] , a+=1 后 理论上它应变为 [1 0000 0000]。 但由于a 只有8位,它无法保存最高位的1,因此实际情况是在底层位向量将会变为 [0000 0000] 。既是赋值给他 [1 0000 0000](292^9)后减掉了292^9,变为了0。

加法溢出这种现象是有规律的,可以用取模运算计算变量溢出后的值。
对于一个w位的无符号整数变量a,如果用它储存w位的无符号整数变量b和c的和,那么运算后它的值为:

a=(b+c)mod2w(公式2)

a=(b+c) mod 2^w (公式2)
假如b+c= [1111 1111] 小于 2w2^w [1 0000 0000], (b+c)mod(aw)(b+c) mod (a^w) 总是等于他自身,所以公式2试用于所有非溢出情况。另一方面,可计算变量溢出后的实际值,例如变量b [1111 1111] 加c [0000 0101] 等于 [1 0000 0100] 溢出后 为 [0000 0100] (254+5)mod(2w)(254+5)mod (2^w) 会得4, 等于[0000 0100],既溢出后a实际的值。

用取模运算计算减法溢出后的值:
设一个w位的无符号整数变量a,如果用它储存w位的无符号整数变量b和c的差,则:

a=(b+(2w−c))mod2w(公式3)

a=(b+(2^w-c))mod 2^w (公式3)
例如b=[0000 0000] , c=[0000 0001], 得出的结果将为 2w−12^w-1

用取模运算计算乘法溢出后的值:
设一个w位的无符号整数变量a,如果用它储存w位的无符号整数变量b和c的积,则:

a=(b∗c)mod2w(公式4)

a=(b*c)mod2^w (公式4)
例如:b=5 [101],c=3[011]在无符号编码下它的值为[101]*[011]=[1 111], 溢出后为[111]
15mod23=715mod2^3=7 [111],公式计算结果与实际值一致。

–用移位替代乘法和除法

无符号整数的乘法,除法相对于加减法,移位,位级运算来讲是很慢的。乘法可以被移位操作和加法的组合替代掉。

1,左移代替乘法。

已知一个位向量 x⃗ ,[xw−1,xw−2,...,x0]\vec x , [x_{w-1},x_{w-2},...,x0]。如果在它的最低位添加k个0,则它会变为,[xw−1,xw−2,...,x0,0,...,0][x_{w-1},x_{w-2},...,x0,0,...,0]

计算这个位向量的十进制值的公式是上面的公式1的一种变形,由于xk至x0x_k至x_0都是0,求和公式并没有太大的改动,只是公式1中的每个位都要再乘以2k2^k,既变为了 :

∑i=0w−1xi2i+k=(∑i=0w−1xi2i)∗2k(公式5)

\sum_{i=0}^{w-1}x_i2^{i+k}=(\sum_{i=0}^{w-1}x_i2^i)*2^k (公式5)

结论: x⃗ ∗2k\vec x*2^k 等于在位向量的低位添加k个0 ,也既是整个位向量向左移k位。

例:
x⃗ ∗10=x⃗ ∗(23+2)=x⃗ <<3+x⃗ <<1\vec x*10=\vec x * (2^3+2)=\vec x
x⃗ ∗5=x⃗ ∗(22+1)=x⃗ <<2+x⃗ \vec x*5=\vec x * (2^2+1)=\vec x

2,右移代替除以2的幂
设位向量 x⃗ ,[xw−1,xw−2,...,x0]\vec x , [x_{w-1},x_{w-2},...,x0]
设 k 为 0≤k<w0 \leq k
设 x,x^,为一个w-k位的位向量[xw−1,xw−2,...,xk][x_{w-1},x_{w-2},...,x_k]
设x″x^{''}为[xk−1,...,x0][x_{k-1},...,x_0]

根据公式1对x,x,,x″x,x^,,x^"进行求和:

x=∑i=0w−1xi2i(公式6−1)

x=\sum_{i=0}^{w-1}x_i2^i (公式6-1)

x,=∑i=kw−1xi2i−k(公式6−2)

x^,=\sum_{i=k}^{w-1}x_i2^{i-k} (公式6-2)

x″=∑i=0k−1xi2i(公式6−3)

x^{''}=\sum_{i=0}^{k-1}x_i2^i (公式6-3)
将公式6-2乘以 2k2^k得出:

x,=∑i=kw−1xi2i(公式6−4)

x^,=\sum_{i=k}^{w-1}x_i2^i(公式6-4)
而公式6-4( 2kx,2^kx^,)加上公式6-3等于公式6-1,也既是x,所以:

x=2kx,+x″(公式6−5)

x=2^kx^,+x^{''}(公式6-5)
再观察公式6-3,位向量最小值为 [00…0], 最大值为[11…1],此最大值的求和公式为 ∑k−1i=02i=2k−1\sum_{i=0}^{k-1}2^i =2^k-1 。
所以 x″x^" 的取值范围是 0≤x″≤2k−10\leq x^{''} \leq 2^k-1或 0≤x″<2k0 \leq x^{''} 。
由于 x″x^{''}总是整数并且总是小于 x″x^{''},那么 x″/2kx^{''}/2^k一定是一个小于1的小数,向下舍入总是得0:

⌞x″/2k⌟=0(公式6−6)

\llcorner x^{''}/2^k \lrcorner=0(公式6-6)
公式6-5两边除以 2k2^k并向下舍入,得 ⌞x/2k⌟=⌞x,+x″/2k⌟ \llcorner x/2^k\lrcorner=\llcorner x^,+x^{''}/2^k\lrcorner,因为 x,x^,为整数, x″/2kx^"/2^k又一定为一个小数,所以等式右边舍入后既是x’。

⌞x/2k⌟=x,(公式6−7)

\llcorner x/2^k\lrcorner = x^,(公式6-7)
再考虑下如果对位向量x进行右移k位的操作, [xw−1,xw−2,...,x0][x_{w-1},x_{w-2},...,x_0]右移k位会得到 [0,...,0,xw−1,xw−2,...,xk][0,...,0,x_{w-1},x_{w-2},...,x_k],位移后的向量实际上就是上面的 x,x^, 。

结论:对于位向量x,[xw−1,xw−2,...,x0][x_{w-1},x_{w-2},...,x_0]右移k位等同于x/2kx/2^k。

无符号整数的除法也可以用向右移位来替代,但只局限于除以2的幂的情况。
[0000 1100]=12
右移两位
[0000 0011]=3
12÷22=312\div 2^2=3

2,补码编码

–函数缩写

补码编码的最高有效位(xw−1)(x_{w-1})为负权,它表示的是xw−1∗(−2w−1)x_{w-1}*(-2^{w-1})。当它为1时,它将会减去后面的正数之和,通过这种方式表示负数。当它为0时,0∗(−2w−1)0*(-2^{w-1})为0,位向量的值为正数。
公式: 如果有位向量 x⃗ 既[xw−1,xw−2,...,x1,x0]\vec x 既[x_{w-1},x_{w-2},...,x_1,x_0] ,则它在补码编码中的值为:

B2Tw(x⃗ )=−xw−12w−1+∑i=0w−2xi2i(公式7)

B2T_w(\vec x)=-x_{w-1}2^{w-1}+\sum_{i=0}^{w-2}x_i2^i(公式7)

–取值范围

w位补码的最小值为[100…0]既是 −2w−1-2^{w-1},最大值为[011…1] 既是∑w−2i=02i\sum_{i=0}^{w-2}2^i。
这种编码模式又造成了一种现象。考虑一下 23−(22+21+20)=12^3-(2^2+2^1+2^0)=1 我们发现 xwx^w总是比∑w−1i=0xi\sum_{i=0}^{w-1}x^i 大1,因此 w位补码 的最小值的绝对值 总是比 它的最大值大1。正负数两端并不是对称的。

–扩展

与无符号编码的扩展方式不同。由于最高有效位为负权,在不改变位向量的值的情况下对它进行扩展的方法叫做符号扩展,考虑一个位向量[1111 1111] ,它的值为 27−26−25−...20=12^7-2^6-2^5-...2^0=1。符号扩展一位后为[1 1111 1111] ,它的值依然为1,根据此数学规律,在位向量为负数的时候,既是最高位为1的时候,在它的最高位左边添加1不会影响它的值。而在位向量为正数时,在最高位左侧添加0,同等于上面无符号编码中的零扩展,也不会改变它的值。

这种在补码编码中对变量进行扩展的方式称为符号扩展—–在最高位左侧添加最高有效位的副本。

–溢出

补码编码的溢出除了考虑赋予变量的值超出它能表示的最大值的情况外,还要考虑赋予它的值超出了它能表示的最小值的情况。
设有w位的有符号整数变量a [aw−1,aw−2...a1,a0][a_{w-1}, a_{w-2}...a_1,a_0]
a的取值范围为−2w−1≤a≤2w−1−1-2^{w-1}\leq a\leq 2^{w-1}-1
补码加法溢出与无符号编码相同现,可以用取模运算计算变量溢出后的值。
对于一个w位的变量a,它储存w位的变量b和c的和,那么运算后它的值为:

a=(b+c)mod2w(公式8)

a=(b+ c) mod 2^w (公式8)
但 补码编码的溢出除了考虑赋予位向量的值超出它能表示的最大值的情况外,还要考虑赋予它的值超出了它能表示的最小值的情况。

(b+c)mod2w=⎧⎩⎨⎪⎪b+c−2wb+cb+c+2w2w−1≤b+c−2w−1≤b+c<2w−1b+c<−2w−1(公式9)

(b+ c) mod 2^w=\left\{ \begin{array}{rcl} b+c-2^w & \leq b+c}\\ b+c & \leq b+c
例如:b=-1[1111 1111] c=-128[1000 0000]
b+c=[1 0111 1111]=-129
溢出后为 [0111 1111]=127
根据公式11的条件3,公式10计算结果为:(b+c)+2^w=-129+256=127

减法溢出:
对于一个w位的变量a,它储存w位的变量b和c的差,那么运算后它的值为:

a=(b−c)mod2w(公式10)

a=(b-c) mod 2^w (公式10)

(b−c)mod2w=⎧⎩⎨⎪⎪b−c−2wb−cb−c+2w2w−1≤b−c−2w−1≤b−c<2w−1b−c<−2w−1(公式11)

(b- c) mod 2^w=\left\{ \begin{array}{rcl} b-c-2^w & \leq b-c}\\ b-c & \leq b-c
例如b=-128[1000 0000] c=1[0000 0001]。
位向量相减得 b-c=[0111 1111] ,127。
公式10计算结果,根据公式11情况3, b−c+2w=−128−1+256=127b-c+2^w=-128-1+256=127。

用取模运算计算乘法溢出后的值:
设一个w位的有符号整数变量a,它储存w位的有符号整数变量b和c的积,则:

a=(b∗c)mod2w(公式12)

a=(b*c)mod2^w (公式12)

–用移位替代乘法和除法

1,左移替代乘法
无符号编码中的公式5对补码编码依然通用,既:

∑i=0w−1xi2i+k=(∑i=0w−1xi2i)∗2k(公式5)

\sum_{i=0}^{w-1}x_i2^{i+k}=(\sum_{i=0}^{w-1}x_i2^i)*2^k (公式5)
结论: 有符号整数x∗2k有符号整数x*2^k 等于在位向量的低位添加k个0 ,也既是整个位向量向左移k位。

2,右移代替除以2的幂
在无符号编码中,代替除法的右移为逻辑右移,既在最高位添加0。
对于一个最高位负权为0的有符号整数,逻辑右移的效果是一定与无符号整数一致的。但是如果最高位负权为1,最高位添加0肯定是错误的,负数将会变为正数。因此替代的方法为算术右移。设x为有符号整数变量x,整数k为 0≤k<w0 \leq k, x,x^,为截取x w-k位的有符号整数,x”x^”为截取x低k位的无符号整数,用无符号编码部分相同的逻辑可以推理到公式6-5,x=2kx,+x″(公式6−5)x=2^kx^,+x^{''}(公式6-5) ,两边除以2k2^k得x/2k=x,+x″/2k x/2^k= x^,+x^{''}/2^k,但是再进一步分析就要考虑x为负数的情况了:
1,x为正数
x,x^,为x移位前左边部分截取的位向量,它的值是我们算术右移后应该得到的值,它的负权位与x的负权位是一致的, x″x^{''} 为x的位向量的低k位的无符号数,设为无符号数是因为它代表的是x移位前低k位的值。x″/2kx^{''}/2^k一定是一个小于1的小数,那么可以把x=2kx,+x″(公式6−5)x=2^kx^,+x^{''}(公式6-5)两边同时向下舍入得出⌞x/2k⌟=x,(公式6−7)\llcorner x/2^k\lrcorner = x^,(公式6-7),此公式的意义既是有符号整数x除以2k2^k等于算术右移k位。这些内容等同于无符号编码的部分。

2,x为负数
x,x^,为x移位前左边部分截取的位向量,它的值是我们算术右移后应该得到的值,它的负权位与x的负权位是一致的, x″x^{''} 为x的位向量的低k位的无符号数, 设为无符号数是因为它代表的是x移位前低k位的值。公式6-5两边除以2k2^k得x/2k=x,+x″/2k x/2^k= x^,+x^{''}/2^k,现在,2k2^k一定为正数,如果x为负数,那么x/2kx/2^k为一个负数,由于我们想要的实现的整数除法的结果是舍去小数部分的整数,一个负数向下舍入将会改变整数部分,例如-3.14向下舍入将会得到-4,这里应该向上舍入得-3。但是实际上代码的整除除法的结果总是向下舍入,因此须找到一个能达到⌜x/2k⌝\ulcorner x/2^k \urcorner效果的某种向下舍入的方法。

设x=k∗2k+r,0≤r<2kx=k*2^k+r, 0 \leq r,k代表x除以2^k后的整数部分, r代表x除以2k2^k后的余数部分。
两边同时加2^k-1再除以2^k并向下舍入:

⌞(x+2k−1)2k⌟=⌞k+r+2k−12k⌟(公式13)

\llcorner\frac{(x+2^k-1)}{2^k}\lrcorner=\llcorner k+\frac{r+2^k-1}{2^k}\lrcorner (公式13)
当r=0时,既x没有小数时, ⌞2k−12k⌟\llcorner\frac{2^k-1}{2^k}\lrcorner一定等于0,公式13左边部分等于x的整数部分。
当r>0时,由于 r<2k,⌞r+2k−12k⌟=⌞2k2k⌟+⌞r−12k⌟=1+0=1r。公式13左边部分等于x减去小数部分,整数部分加一。
因此 ⌞(x+2k−1)2k⌟\llcorner\frac{(x+2^k-1)}{2^k}\lrcorner既是我们想要的转换 ⌜x/2k⌝\ulcorner x/2^k\urcorner的方法。
将 2k2^k转换成移位, 2k=1∗2k=1<<k2^k=1*2^k=1。

3,结论:对于有符号整数变量x,除以2k2^k,等同于对它的位向量[xw−1,xw−2,...,x0][x_{w-1},x_{w-2},...,x_0]进行以下的移位操作:

(x<0?(x+(1<<k)−1):x)>>k(公式14)

(x>k(公式14)

–有符号数和无符号数之间的转换

设一个无符号数变量x,它的位向量是 [1111 1111],它的值为255。
将变量x强制转换为有符号格式,它的位向量不发生任何改变,依然还是[1111 1111],在补码编码下,它的值为-1。
考虑一下它的值的变化,在无符号编码下,它的值为23+22+21+202^3+2^2+2^1+2^0,在补码编码下,它的值为−23+22+21+20-2^3+2^2+2^1+2^0,所以x在由无符号变量转换为有符号变量的过程中,它的值减少了两个232^3,反过来讲既是,x在由有符号变量转换为无符号变量的过程中,它的值增加了两个232^3,如果设x的位向量为w位,[1w−11w−21110][1_{w-1} 1_{w-2} 1_1 1_0],两个232^3既是两个2w−12^{w-1},两个232^3等于242^4,两个2w−12^{w-1}等于2w2^w。将这个变换转为数学公式:

T2Uw(x)=xw−12w+x(公式15)

T2U_w(x)=x_{w-1}2^w+x(公式15)

U2Tw(x)=x−xw−12w(公式16)

U2T_w(x)=x-x_{w-1}2^w(公式16)
在由无符号变量转变为有符号变量后,当x的最高位,w-1位,负权位为1时,它自身的值会增加 xw−12wx_{w-1}2^w,当他的最高位w-1为0时,它的值 保持不变。反之亦然。

ASCII字符

假设有位向量 [0100 0001]
通过无符号编码解释,此向量代表65。
通过补码编码解释,此向量代表65。
通过ASCII字符码解释,此向量既是代表 “A”。
因此在C语言中,将一个被赋值“A”的char变量用%d 打印出来的结果将会为“65”。
ASCII码表中的127个打印字符分别对应[0000 0000]至[0111 111]的位向量。由于不涉及到最高有效位,所以在c语言中声明一个 char a=”A”;不管是用%d还是%u格式打印,输出都会是65。

附:
十六进制Hexadecimal/十进制Decimal/二进制Binary(无符号编码) 对应表(16进制0至F):

Hex 0 1 2 3 4 5 6 7 8 9 A B C
Bin 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100
Dec 0 1 2 3 4 5 6 7 8 9 10 11 12
Hex D E F
Bin 1101 1110 1111
Dec 13 14 15

Reference:
深入理解计算机系统(原书第二版 )—Randal E.Bryant


维护日志:
2017-8-22:
-更改一处错误:将“a的取值范围为−2w−1≤a≤2w−1-2^{w-1}\leq a\leq 2^w-1 ”改为将“a的取值范围为−2w−1≤a≤2w−1−1-2^{w-1}\leq a\leq 2^{w-1}-1 ”。
-修正了最后对应表中E,F没显示出来的问题。

二进制(1):无符号编码和补码编码相关推荐

  1. 深入理解计算机系统(2.4)------整数的表示(无符号编码和补码编码)

    上一篇博客我们主要介绍了布尔代数和C语言当中的几个运算符.那么这一篇博客我们主要介绍在计算机中整数是如何表示的,诸如我们在编码过程中遇到的对数据类型进行强制转换可能会得到意想不到的结果在这篇博客里你会 ...

  2. 深入理解计算机系统(2.3)---整数的表示方式精解无符号与补码编码(重要)...

    本文转载地址:http://www.cnblogs.com/zuoxiaolong/p/computer7.html 上一章我们简单的介绍了布尔代数以及C语言的位运算,本次我们主要来看,二进制如何表示 ...

  3. 整数的无符号编码和有符号编码

    整数的无符号编码和有符号编码 单个的位没有实际意义,加上解释才有实际意义.我们可以把位组合在一起,并且加上解释以此赋予它意义. 无符号编码表示的数 x >= 0 有符号编码表示的数   min ...

  4. 无符号哥伦布指数编码

    在H264编解码中,哥伦布指数编码是经常用到的,下面是无符号哥伦布指数编码的C代码: static inline int bs_read_ue( bs_t *s ) {     int i = 0; ...

  5. (原码反码补码的计算)在一个8位的二进制的机器中,补码表示的整数范围是从_(1)_(小)到_(2)_(大)。这两个数在机器中的补码表示为_(3)_(小)到_(4)_(大)。数0的补码为_(5)_。

    https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注! 欢迎关注微信公众号:宝藏女孩的成长日记 如有转载,请注明出处(如不注明,盗者必究) 目录 题目 分析过 ...

  6. 视频在html不能播放器,网页无插件直播H265编码视频播放器EasyPlayer网页播放器不能播放怎么处理?...

    原标题:网页无插件直播H265编码视频播放器EasyPlayer网页播放器不能播放怎么处理? EasyPlayer播放器系列项目提供了非常简单易用的SDK及API接口,用户通过API调用就可以非常快速 ...

  7. 无存储式优惠券编码方案

    代码 代码仓库:地址 代码分支:master 博客:地址 简介 优惠券是常见的营销工具,每逢佳节必有促销活动,有活动就会有优惠券.线下活动通常限量提供优惠券,因此不需要特殊设计,但是互联网环境下,线上 ...

  8. base64 二进制流java_读取和base64编码二进制文件

    我'm trying to read a binary file from the filesystem and then base64 encode it in JavaScript. I'使用Fi ...

  9. base64位转成二进制流_你知道 Base64 编码中的 64 指的是什么吗?

    最近仔细看了 Base64 编码的原理,觉得还挺有意思,决定写篇文章来聊聊.分别以"超越技术"中的"超","lefe" 中的 "l ...

最新文章

  1. .net framework 4中SpinLock和lock的区别
  2. 关于因为该列没有包含在聚合函数或 GROUP BY 子句中
  3. 【对讲机的那点事】公网对讲机选择物联网卡常见问题
  4. mysql locking_Mysql next-key locking,读锁,写锁
  5. js判断时间两小时之内_js判断两个时间的大小
  6. Node.js CLI 工具最佳实践
  7. 微信小程序 navigateTo 传对象参数
  8. .NET 6 全新指标 System.Diagnostics.Metrics 介绍
  9. 08_MySQL DQL_SQL99标准中的多表查询(内连接)
  10. 倍加福二维码测试1-串口助手测试
  11. SIM900A短信操作
  12. 怎么做PPT 课件代做 驼峰设计
  13. ubuntu搜狗输入法切换快捷键fcitx设置
  14. net.sf.json.JSONException: JSONObject[节点名称] not found解决方法
  15. Android 8.0 Activity启动流程分析
  16. 关于YunFile网盘的一些使用技巧与心得
  17. 阔密保密专家:数字货币将要来临 你的手机安全吗?
  18. PS 不能使用移动工具 因为目标图层被隐藏怎么办
  19. Java编写 输入一个字符串,请编写一个函数统计连续相同字符及其数量。例如,输入“aabbbbcccAB”,返回“a2b4c3 A1 B1”及5;
  20. pulp.apis.core.PulpSolverError: PuLP: cannot execute glpsol.exe的一种解决方案

热门文章

  1. 电脑底部任务栏点不动_15个小技巧,让我的Windows电脑更好用了!
  2. java后端站内通知_正确使用Java事件通知
  3. c语言删除一个字符指令,【C语言】实现一个基于命令行的文本编辑器
  4. 口红会染唇是什么意思_别只知道露华浓了!这些平价口红,我吹爆!
  5. java把map值放入vector_Thinking in java基础之集合框架
  6. Ubuntu 安装 python-opencv
  7. Java案例:Swing摇奖器
  8. Spring Boot基础学习笔记24:RabbitMQ安装以及整合环境搭建
  9. Spring框架学习笔记07:基于XML配置方式使用Spring MVC
  10. 20.校准相机——直接线性校准不均匀,直接线性校准变换,几何误差_3