位运算(&、|、^、~、>>、<<)

1.位运算概述

从现代计算机中所有的数据二进制的形式存储在设备中。即0、1两种状态,计算机对二进制数据进行的运算
(+、-、*、/)都是叫位运算,即将符号位共同参与运算的运算。


int a = 35;
int b = 47;
int c = a + b;
计算两个数的和,因为在计算机中都是以二进制来进行运算,所以上面我们所给的
int变量会在机器内部先转换为二进制在进行相加:
35: 0 0 1 0 0 0 1 1
47: 0 0 1 0 1 1 1 1
————————————————————
82: 0 1 0 1 0 0 1 0
所以,相比在代码中直接使用(+、-、*、/)运算符,合理的运用位运算
更能显著提高代码在机器上的执行效率。

2.位运算概览

符号 描述 运算规则
& 与 二进制相应的两个位都为1时,结果才为1
| 或 二进制相应的两个位都为0时,结果才为0
^ 异或 二进制相应的两个位相同为0,相异为1
~ 取反 0变1,1变0
<< 左移 各二进位全部左移若干位,高位丢弃,低位补0

右移 各二进位全部右移若干位,对无符号数,高位补0,有符号数,各编译器处理方法不一样,
有的补符号位(算术右移),有的补0(逻辑右移)

3.按位与运算符(&)

定义:参加运算的两个数据,按二进制位进行“与”运算。
例:
3&5 即 0000 0011& 0000 0101 = 0000 0001
所以 3&5 的值得1。

注意:负数按补码形式参加按位与运算。
与运算的用途:

#####(1)清零

如果想将一个单元清零,即使其全部二进制位为0,只要与一个各位都为零的数值相与,结果为零。

#####(2)取一个数的指定位

比如取数 X=1010 1110 的低4位,只需要另找一个数Y,令Y的低4位为1,其余位为0,即Y=0000 1111,
然后将X与Y进行按位与运算(X&Y=0000 1110)即可得到X的指定位。

(3)判断奇偶

只要根据最未位是0还是1来决定,为0就是偶数,为1就是奇数。因此可以用if ((a & 1) == 0)代替
if (a % 2 == 0)来判断a是不是偶数。

4.按位或运算符(|)

定义:参加运算的两个对象,按二进制位进行“或”运算。

例:3|5即 0000 0011| 0000 0101 = 0000 0111
因此,3|5的值得7。

注意:负数按补码形式参加按位或运算。

或运算的用途:

(1)常用来对一个数据的某些位设置为1

比如将数 X=1010 1110 的低4位设置为1,只需要另找一个数Y,令Y的低4位为1,其余位为0,
即Y=0000 1111,然后将X与Y进行按位或运算(X|Y=1010 1111)即可得到。

5.异或运算符(^)

定义:参加运算的两个数据,按二进制位进行“异或”运算。

运算规则:
0^0=0 0^1=1 1^0=1 1^1=0
总结:参加运算的两个对象,如果两个相应位相同为0,相异为1。

异或的几条性质:

1、交换律

2、结合律 (ab)c == a(bc)

3、对于任何数x,都有 xx=0,x0=x

4、自反性: abb=a^0=a;

异或运算的用途:

(1)翻转指定位

比如将数 X=1010 1110 的低4位进行翻转,只需要另找一个数Y,令Y的低4位为1,其余位为0,
即Y=0000 1111,然后将X与Y进行异或运算(X^Y=1010 0001)即可得到。

(2)与0相异或值不变

例如:1010 1110 ^ 0000 0000 = 1010 1110

(3)交换两个数
void Swap(int &a, int &b){if (a != b){a ^= b;b ^= a;a ^= b;}
}

6.取反运算符 (~)

定义:参加运算的一个数据,按二进制进行“取反”运算。
运算规则: 
~1=0
~0=1
总结:对一个二进制数按位取反,即将0变1,1变0。

异或运算的用途:

(1)使一个数的最低位为零

使a的最低位为0,可以表示为:a & 1。1的值为 1111 1111 1111 1110,再按"与"运算,最低位一定为0。
因为“ ~”运算符的优先级比算术运算符、关系运算符、逻辑运算符和其他运算符都高。

7.左移运算符(<<)

定义:将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)。

设 a=1010 1110,a = a<< 2 将a的二进制位左移2位、右补0,即得a=1011 1000。

若左移时舍弃的高位不包含1,则每左移一位,相当于该数乘以2。

8.右移运算符(>>)

定义:将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。

例如:a=a>>2 将a的二进制位右移2位,左补0 或者 左补1得看被移数是正还是负。

操作数每右移一位,相当于该数除以2。

9.复合赋值运算符

位运算符与赋值运算符结合,组成新的复合赋值运算符,它们是:

&= 例:a&=b 相当于 a=a&b

|= 例:a|=b 相当于 a=a|b

= 例:a>>=b 相当于 a=a>>b

<<= 例:a<<=b 相当于 a=a<<b

^= 例:a^=b 相当于 a=a^b

运算规则:和前面讲的复合赋值运算符的运算规则相似。

不同长度的数据进行位运算:如果两个不同长度的数据进行位运算时,系统会将二者按右端对齐,然后进行位运算。

以“与运算”为例说明如下:我们知道在C语言中long型占4个字节,int型占2个字节,如果一个long型数据与一个int型数据进行“与运算“,右端对齐后,左边不足的位依下面三种情况补足,

1)如果整型数据为正数,左边补16个0。

2)如果整型数据为负数,左边补16个1。

3)如果整形数据为无符号数,左边也补16个0。

如:long a=123;int b=1;计算a& b。

如:long a=123;int b=-1;计算a& b。

如:long a=123;unsigned intb=1;计算a & b。

为什么要使用进制数?

数据在计算机中的表示,最终以二进制的形式存在 , 就是各种 <黑客帝国>电影中那些 0101010… 的数字 ;

我们操作计算机 , 实际 就是 使用 程序 和 软件 在 计算机上 各种读写数据,
如果我们直接操作二进制的话 ,
面对这么长的数进行思考或操作,没有人会喜欢。

C,C++ 语言 没有提供在代码直接写二进制数的方法。
用16进制或8进制可以解决这个问题。
因为,进制越大,数的表达长度也就越短。

之所以 使用 16或8进制,而不其它的,诸如9或20进制 .

是因为2、8、16,分别是2的1次方、3次方、4次方。这一点使得三种进制之间可以非常直接地互相转换 ;

8进制或16进制 既 缩短了二进制数,还能 保持了二进制数的表达特点。转换还方便 .

进制的介绍

进制 : 是计算机中数据的一种表示方法。 N进制的数可以用0~(N-1) 的数表示, 超过9的用字母A-F 表示 .

10进制
先说 我们最 熟悉的 10进制 , 就是 用 0~9 的数表示 , 逢 10 进 1 .

16进制
如果是 16 进制 , 它就是 由 0-9,A-F组成, 与10进制的对应关系是:
0-9 对应 0-9;A-F对应10-15;字母不区分大小写。

2进制
2进制 由 0-1组成

8进制
8进制 由 0-7组成

进制转换公式

任意进制转十进制转十进制

各个位置的数码与它们的权值相乘,在相加就得到一个十进制
例如:

如何快速的进行 2进制,10进制,16进制 的 相互转换

先记住二进制 的8421
首先我们来看一个二进制数:1111,它是多少呢?
你可能还要这样计算:1×2º+1×2¹+1×2²+1×2³=1×1+1×2+1×4+1×8=15。

我们必须直接记住1111每一位的权值,并且是从高位往低位记,:8、4、2、1。
即,最高位的权值为2³=8,然后依次是 2²=4,2¹=2,2º=1。

记住8 4 2 1,对于任意一个4位的二进制数,我们都可以很快算出它对应的10进制值。

接下来我们练习 通过 8421 的方式 进行 快速的计算 , 2,10,16进制的转换
1111 = 8 + 4 + 2 + 1 = 15 =F
1110 = 8 + 4 + 2 + 0 = 14= E
1101 = 8 + 4 + 0 + 1 = 13= D
1100 = 8 + 4 + 0 + 0 = 12 =C
1011 = 8 + 0 + 2 + 1 = 11= B
1010 = 8 + 0 + 2 + 0 = 10 =A
1001 = 8 + 0 + 0 + 1 =9 =9
……
0001 = 0 + 0 + 0 + 1 = 1= 1
0000 = 0 + 0 + 0 + 0 = 0= 0

二进制数要转换为十六进制

二进制数要转换为十六进制,就是以4位一段,分别转换为十六进制。
如(上行为二制数,下面为对应的十六进制):
1111 1101 , 1010 0101 , 1001 1011
F D , A 5 , 9 B

16进制数转换为二进制数

反过来,当我们看到 FD时,如何迅速将此16进制数转换为二进制数呢?
先转换F:
看到F,我们需知道它是15(可能你还不熟悉A~F这五个数),然后15如何用8421凑呢?
应该是8 + 4 + 2 + 1,所以四位全为1 :1111。
接着转换D
看到D,知道它是13,13如何用8421凑呢?应该是:8 + 4 + 1,即:1101。
所以,FD转换为二进制数,为:1111 1101

十进制数转换成2进制

由于十六进制转换成二进制相当直接,所以,我们需要将一个十进制数转换成2进制数时,
也可以先转换成16进制,然后再转换成2进制。
比如,十进制数 1234转换成二制数,如果要一直除以2,直接得到2进制数,需要计算较多次数。
所以我们可以先除以16,得到16进制数:
被除数 计算过程 商 余数

1234 1234/16  77     2
77 77/16 4  13     (D)
4 4/16  0           4

结果16进制为:4D2
然后我们可直接写出4D2的二进制形式:
0100 1101 0010
其中对映关系为:
0100 – 4
1101 – D
0010 – 2

二进制数转换成10进制数

同样,如果一个二进制数很长,我们需要将它转换成10进制数时,除了前面学过的方法是,
我们还可以先将这个二进制转换成16进制,然后再转换为10进制。
下面举例一个int类型的二进制数:

01101101 11100101 10101111 00011011
我们按四位一组转换为16进制:6D E5 AF 1B

十进制转十六进制

采余数定理分解,例如将487710转成十六进制:
487710÷16=30481….14(E)
30481÷16=1905….1
1905÷16=119….1
119÷16=7….7
7÷16=0….7
这样就计到487710(10)=7711E(16)
数在计算机中的表示形式统称为机器数。计算机中处理数据及运算都是采用二进制,通常规定机器数用八位二进制表示。
实用的数据有正数和负数,因为计算机只能表示0、1两种状态,数据的正号“+”或负号“-”,在计算机里就用一位二进制
的0或1来区别,通常放在最高位,成为符号位。 符号位数值化之后,为能方便的对机器数进行算术运算、提高运算速度,
计算机设计了多种符号位与数值一起编码的方法,最常用的机器数表示方法有:原码、反码、补码和移码,
下面就分别介绍一下它们的表示方法。

一、原码、反码、补码

三种表示法的转换过程如下:


说明:

正数原码补码反码都相同

特别的,在原码中0有两种表示方式:[+0]原=0000000,[-0]原=1000000。

在反码表示中,0也有两种表示形式:[+0]反=0000000,[-0]反=11111111。

在补码表示中,0有唯一的编码:[+0]补=0000000,[-0]补=0000000。

二、移码

因为个人移码理解有点困难,so单独解释一下:移码表示法是在数X上增加一个偏移量来定义的,
常用来表示浮点数中的阶码,所以是整数。如果机器字长为n,规定偏移量为2^(n-1)。
若X是整数,则[X]移=2^(n-1)+X
则[+45]=+0101101+10000000, [-45]=-0101101+10000000=01010011

 实际上由此可推出,在偏移2^(n-1)的情况下,只要将补码的符号位取反便可获得相应的移码表示。

说明:在移码表示中,0也编码是相同的,[+0]移=1000000,[-0]移=1000000。
计算机之所以这些编码方法是为了便于运算,提高运算速度。四种表示方法其实是层层递进的,即会求十进制的二进制表示,
记住符号位的正负表示,知道怎么递进的它们之间的关系。

浮点数加减例题

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dOuY4cdw-1635422696571)(http://47.96.164.213/upload/2019/12/QQ%E6%88%AA%E5%9B%BE20191220204711-0a99cc7bc8944589b86d076ddefe84c2.png)]
码的乘除运算
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SWMD9aCc-1635422696583)(http://47.96.164.213/upload/2019/12/QQ%E6%88%AA%E5%9B%BE20191220204650-839f947141c24901a74f2ebb92ef72da.png)]

浮点数

浮点数运算是一个非常有技术含量的话题,不太容易掌握。许多程序员都不清楚使用==操作符比较float/double类型的话到底出现什么问题。
许多人使用float/double进行货币计算时经常会犯错.

例题 0.1 + 0.2 = ?

在浏览器中测试下计算结果,得到的结果是 0.30000000000000004,并不是理想中的 0.3 结果值。
为什么会存在这样的误差呢?这是数值运算会存在精度丢失的问题
十进制的 0.1 和 0.2 转换成二进制数值都会是无限循环的值

0.1 -> 0.0001100110011001…(无限)
0.2 -> 0.0011001100110011…(无限)
而根据 IEEE754 标准,尾数最多能存储53位有效数字,那么就必须在特定的位置进行四舍五入处理,
得到的结果分别是:
0.1 -> 0.0001100110011001100110011001100110011001100110011001101
0.2 -> 0.001100110011001100110011001100110011001100110011001101
所以,相加得到的二进制结果为:
0.0001100110011001100110011001100110011001100110011001101 +
0.001100110011001100110011001100110011001100110011001101
= 0.0100110011001100110011001100110011001100110011001100111
二进制结果转换成十进制就是 0.30000000000000004。

同样的数值可以有多种浮点数表达方式,比如 123.45 可以表达为 12.345 × 10^2,0.12345 × 10^3 或者 1.2345 × 10^2。
因为这种多样性,有必要对其加以规范化以达到统一表达的目标。规范的(Normalized)浮点数表达方式具有如下形式:

d.dd…d × β^e , (0 ≤ di < β)

其中 d.dd…d 即尾数,β 为基数,e 为指数。尾数中数字的个数称为精度,在本文中用 p(presion) 来表示。
每个数字 d 介于 0 和基数β之间,包括 0。小数点左侧的数字不为 0

浮点数加减运算(总共包括5个步骤):

1、对阶

对阶就是比较参与运算的浮点数的阶码大小,然后使他们的阶码(或移码)都一样,其最终目的是使参与运算的数的小数点位置对齐,以便得出正确的结果。
既然需要使参与运算的浮点数的阶码一样,这时就要以某一个浮点数的阶码为标准了,通常以大阶码为准,即阶码小的数,要向阶码大的数对齐,也就是将小阶码的值调成与大阶码的值一样,这时,为了确保小阶码的数值与原来的保持一致,肯定需要对小阶码的尾数的小数点进行移位,就像十进制数中的1.2345 * 103,如果将指数3变成5,那么尾数1.2345的小数点位置不可能保持不变,要向左移两位,变成0.012345,所以,最终的形式为0.012345 * 105。
因为是以大阶码为准,所以小阶码需要增大,那么尾数需要做相同倍数的减小,才能保持数值不变(即阶码小的尾数需要向右移对应的位数[小数点是向左移]),因为原则是,在尾数最高位前面加对应数量的0,然后原尾数最后的对应尾数直接丢弃,移了多少位就丢弃多少位(直接丢弃是因为存储尾数的存储器空间是固定的)。

对阶中的尾数移位可以借助十进制的科学计数法来帮助理解,假设十进制数1234.5原来表示成1.2345 * 103,现在需要表示成106的格式,则对应的格式为0.0012345 * 106(在原来的小数点右边最高位前面移了三位,补加了两个0),又假设小数点后面最多只能4位(浮点数中用来保存尾数的存储空间是固定的),这样一来,最终的存储格式是0.0012 * 106,尾数中原来的"345"就被丢弃了,虽然这会在一定程度上导致与原值有区别,但还是在最大限度上保持了不变。

示例:X = 20010 * 0.11000101,Y = 20100 * 0.10101110。对这两个浮点数进行加减法运算(尾数的符号位是体现在浮点数的符号位上,阶码和尾数均已采用补码形式表示)。
X的阶码为0010,对应的十进制数位2,Y的阶码为0100,对应的十进制数为4,因此,X的阶码比Y的阶码小,此时应将X的阶码变成与Y的阶码一样,即都调成4,同时需要将X的尾数小数点左移2位(在小数点右边最高位前面加两个0,原来最低的2位被丢弃,这样才能使X的值与原来保持基本不变)。
X原来的尾数为11000101,向右移两位(仍要保持原来的总位数不变,则要在前面补相应位数的0,原来最右边的对应两位丢弃),则变成了00110001,这样一来,X的阶码也变成了0100,最终X在存储器中的格式是0 0100 00110001(原来为0 0010 11000101)。

2、尾数运算

通过对阶将尾数的小数点对齐之后,就能将经过移位的尾数进行加减运算,这一步很简单,可以直接参照博文–“无符号二进制运算”。
继续前面的示例:X = 20010 * 0.11000101,Y = 20100 * 0.10101110,现要求X+Y。
X对阶后的尾数为00110001,Y的尾数不变,为10101110,两者相加:

X 00110001
Y 10101110
结果 11011111

3、规格化处理

规格化处理主要是针对浮点数的尾数部分,规格化的尾数格式要求如下:
尾数采用原码表示形式时:正数的规格化格式为:0.1XXX,负数的规格化形式为1.1XXX。
尾数采用补码表示形式时,正数的规格化格式为:0.1XXX,负数的规格化形式为:1.0XXX。
以上的最高位均代表符号位(0代表正数,1代表负数),关键是看小数点后面的数的格式。

对于双符号位(用两位来表示符号)的补码形式尾数,正数的规格化格式为00.1XXX,负数的规格化格式为:11.0XXX,以上最高两位代表符号位(00代表正数,11代表负数),关键是看小数点后面数的格式。
引入双符号位的设计目的就是为了能快速检测出运算结果是否有溢出,因为双符号位规定了"00代表正数,11代表负数",如果最高两位不是这两种形式,而是"01"或者是"10"就能快速知道有溢出了,符号位为"01"的时候称为"上溢",即最高真值位相加后有进1,为"10"时,称为"下溢",即最高真值位相减后有借1。
—引自王达老师《深入理解计算机网络》一书

本文内容仅涉及单符号位,有兴趣了解双符号位的,可以关注后续博文。
凡不符合以上格式要求的尾数均要进行规格化,对以上规格化格式进行总结可以得出:符号位与尾数最高位不一致才算是规格化,一致为非规格化。如1.0XXX,0.1XXX(最前面的为符号位)之类的尾数都是规格化的数,而1.1XXX,0.0XXX为非规格化的数,另外,如果尾数大余1,也是非规格化数。
对于非规格化的尾数需要进行相应的处理,处理方式又分为"左规"和"右规",所谓"左规"就是尾数需要向左移位,每移1位阶码值减1,直到为规格化数为止,对应"右规"就是尾数要向右移位,每移1位阶码值减1,直到为规格化数为止。
采用"左规"还是"右规"的基本原则如下:
运算结果产生移益出(由于原来两尾数的最高有效位相加有进位或者相减有借位时形成的)时,必须进行"右规",如双符号位的运算结果为10.XXX或01.XXX格式就是不符合规格化要求了,因为双符号位时符号位为"10"和"01"都是不正确的,右规时,最高有效位前补相应数量的0,此时,10.XXX格式右规后的格式为11.0XXX,而01.XXX格式右规后的格式为00.1XXX。
如果运算结果出现0.1XXX或者1.1XXX(即符号位与尾数最高有效位相同时),必须进行左规,左规时最低有效位后补相应位数的0。
在上面的例子中,X与Y的尾数之和是11011111,又因为它是正数,所以可以表示成0.11011111,已经是规格化,不用再处理了。
如果X与Y相减,得出的尾数之差为负数,如1.1101111,这时就要进行规格化处理了,因为符号位1与尾数最高位1相同,这时需要进行左规,即向左移位,11011111要向左移两位才能使尾数的最高位与符号位不一致,移位后的尾数为01111100(最后两个0是补上去的)同时阶码要从原值0100相应减2,得到0010。

4、舍入处理

在"对阶"和向左,向右规格化处理时,尾数要向左,向右移位,这样结果尾数与原先的尾数就会有一定的误差,因此要进行舍入处理,以尽可能减小这种误差。
以下提供两种减小误差的方法:
“0舍1入法”:
类似十进制中的四舍五入法,即如果左规或右规时丢弃的是0,则舍去不计,反之要将尾数的末尾加1。
如上面举例的X和Y的尾数之和为:1.11011111(最高位为符号位),需要左规,得到1.01111100,由此可见左移时去掉的是前面的两位1,这种情况下就需要在尾数的最后一位加1,这样进行舍入处理的结果就是:1.01111101。
‘‘恒置1法’’:
只要有数位被左规或者右规丢弃掉,就要在尾数的末尾恒置1,但是这个方法精确度不高,因为从概率上来讲,丢弃0和1的概率各占50%。
IEEE 754还有许多更复杂的舍入模式,有兴趣可以自行了解。

5、溢出处理

如果采用双符号位补码形式,出现了"01"或者是"10"的形式就表示有溢出,但是,如果采用的是单符号位就不好判定了。这时需要根据对尾数进行规格化处理后的阶码是否超出了当前阶码所能表示的取值范围来判定了。
上文已经提到了,右规后阶码需要加上对应的值,尾数每向右移一位就加1,最终可能导致阶码超出了当前类型的阶码所能表示的数值范围,这称为"上溢"。
如(X+Y)补浮点数经过"对阶"和尾数相加后得到的尾数为10.101110011,显然它需要右规,结果为11.01110011,相当于尾数右移了一位,原来尾数的最高有效位"1"被丢弃了,同时阶码也需要相应加1,假设原先是用4位来保存阶码(算上阶码的符号位,所以,最大能表示的数是+7),原阶码为0111,尾数右移一位后,阶码+1就变为8了,而这个是大于+7的,所以这是就需要进行溢出处理了。
同时,尾数进行左规的时候,也有溢出的情况,因为左规后可能超出了用于存储阶码的存储位所能表示的最小值(称为"下溢"),如左规后得到的新阶码为-5,假设原先的阶码是用4为来存储的,现在要求尾数再左移3位,这样阶码也要减小3,得到-8,而-8也超出了4位阶码所能表示的最小值-7(阶码的最高位为符号位)。如果发现有溢出,计算机会根据以下原则进行处理:
如果是上溢,立即停止运算,做中断处理。
如果是下溢,整个尾数按0处理。

浮点数

进制操作,数据底层计算机基础相关推荐

  1. 计算机进制换算方法 ppt,计算机基础数制及其相互转换.ppt

    <计算机基础数制及其相互转换.ppt>由会员分享,可在线阅读,更多相关<计算机基础数制及其相互转换.ppt(39页珍藏版)>请在人人文库网上搜索. 1.领域一 项目13 游戏二 ...

  2. ASCII字符和16进制字节数据互转

    接着上次写的一个字符转换.这次是互转,更便于理解. 1.CharToHex() //功能描述:把ASCII字符转换为16进制 将两个ASCII字符转化为单个字节进行显示,即两个字节转化为一个字节.如' ...

  3. linux sh : 由未实现函数引起bash读取2进制附加数据引起的报错

    前言 写好的linux安装包管理脚本附加了tar文件. 运行安装包,本来要执行安装管理脚本,可是没运行,直接报错.说2进制附加数据里面有语法错误. 刚写好的脚本100行左右,开始没看出是哪引起的错误. ...

  4. 用百家姓表达128进制的数据

    用百家姓的前128个姓氏,表示128进制的数据,让中国的老百姓在看大数据时更容易掌握,尤其适合在比特币的收款地址中使用更有价值. 百家姓的前128个姓氏是: 赵钱孙李周吴郑王 冯陈褚卫蒋沈韩杨 朱秦尤 ...

  5. 计算机基础进制的换算教案,计算机系统基础(二)数值进制和进制转换

    http://kaito-kidd.com/2018/07/17/computer-system-binary-octal-hexadecimal-decimal/#more # 信息的二进制编码 在 ...

  6. 计算机转进制怎么看平方,计算机数制转换

    一.数制的引入 数制就是计数的方法,指用一组固定的符号和统一的规则来表示数值的方法. 在日常生活中,人们主要使用十进制(0-9),但在某些时候也使用其它进制,如十二进制(如1年有12个月.1打物品有1 ...

  7. c语言变量名必须用小写 常量用大写,day02 -C语言 常量 变量 数据类型 进制转换 数据溢出...

    常量 - 不会变化的数据 "hello" 'A' 10 3.14 #define PI 3.14 //采用宏定义的方法 定义一个常量 const int a = 10; 求圆的面积 ...

  8. 16进制输出C语言字符常量,基础C语言:进制、常量

    基础C语言:进制.常量一.进制 1.什么叫进制 进制就是逢几进一,我们说N进制实际就是指逢N进一 (例,计算机只识别二进制:人类习惯使用的是十进制:为了实际需要又建立了八进制和十六进制) 2.不同进制 ...

  9. javascript 西瓜一期 14 回顾 字符与编码 进制转换 数据保存

    回顾前情 >字符都有一个编码对应 比如 字符a对应的编码是97(十进制) 所以如果保存了一个内容,只是字符a 会把a对应的编码进行保存 然而97计算机也不可以直接识别 电脑会把十进制的97转换为 ...

最新文章

  1. 简练软考知识点整理-项目合同的类型
  2. cypress测试框架与selenium_selenium自动化测试框架之PO设计模式
  3. w ndows7与XP哪个好,windows7和xp哪个好 windows7好用吗
  4. 免费网页模板提供站推荐
  5. oracle查询耗资源的进程,常用Oracle进程资源查询语句(运维必看)
  6. Android音视频从入门到提高---任务列表
  7. Win10设置定时关机命令简单介绍
  8. mac上谷歌浏览器添加插件显示程序包无效的解决办法
  9. 苹果Appstore加急审核方法
  10. 【JZOJ5882】雪人
  11. 实变函数(4)--Lebesgue积分
  12. 贝叶斯在计算机视觉中的应用,KNN与朴素贝叶斯在计算机视觉的鱼苗计数中的应用探索.doc...
  13. ospf在NBMA网络中的配置
  14. 2021年煤矿井下爆破考试内容及煤矿井下爆破考试资料
  15. 《红楼梦》金陵十二钗判词及赏析
  16. win10 文件服务器 群晖,转帖!手把手教您用win10做NAS:搭配emby,VM虚拟群晖,直通......
  17. matlab画信号图方法,献给初学者:手把手教你绘制信号通路图
  18. mysql语句:SET NAMES UTF8
  19. linux 删除文件(批量删除文件)
  20. VB关于矩阵的操作问题

热门文章

  1. 数据结构与算法——二叉树
  2. JavaBean,POJO,EJB的区别
  3. DRM框架(vkms)分析(9)----drm驱动创建fbdevice分析(以rockchip_drm_drv为例)
  4. k-fold cross validation 相关的帖子、论文 建议收藏哦 ~
  5. Web安全 学习笔记
  6. 当使用curl 下载压缩包时报解压格式错误
  7. 异步AsyncTask,怎样停止AsyncTask和Thread
  8. AsyncTask介绍
  9. Visitor(访问者)设计模式
  10. Google Earth Engine(GEE) 批量运行和取消task