1.1.1 课前练习
(1)将下列数字化为16位二进制数字和4位16进制数字
12 34 56 65535
1.1.2 十六进制和二进制转化表
十进制 十六进制 八进制 二进制
0 0 0 0000
1 1 1 0001
2 2 2 0010
3 3 3 0011
4 4 4 0100
5 5 5 0101
6 6 6 0110
7 7 7 0111
8 8 10 1000
9 9 11 1001
10 A 12 1010
11 B 13 1011
12 C 14 1100
13 D 15 1101
14 E 16 1110
15 F 17 1111
十六进制化为二进制
将每个数字化成对应的4位二进制数字即可。
例 FF = 11111111, AB=10101011
二进制化为十六进制
从右到左,4位一组,添0补齐,
例10101011=AB
0101011=00101011= 2B
二进制化为八进制
从右到左,3位一组,添0补齐,
1.1.3 位运算
~ 取反,1变0,0变1.
~0=1, ~1=0
~的基本性质 ~(~x) = x;
& 与,全为1时方为1,有一个是0必为0
例 1&1 = 1, 0&1 =0, 0&0=0 ,1&0=0
&的基本性质x&0=0, x&1=x
| 或, 全为0时方为0,有一个是1为1
例 1|1 = 1, 0|1 =1 0|0=0,1|0=1
&的基本性质x|1=1, x|0=x
^ 异或, 值不等时为1,相等时为0.
例 1^1 = 0, 0^1 =1, 0^0=0, 0^1=1
^的基本性质x^x=0, x^(~x) = 1
例1:
int x =1 &2;
则x =0;
因为1 = 01, 2=10
01
10 &
__
00
例2:
int x =1 |2;
则x =3;
因为1 = 01, 2=10
01
10 |
__
11
例3:
int x =1^2;
则x =3;
因为1 = 01, 2=10
01
10 ^
__
11
例4:
int x = 25&63;
则x =25;
因为25 = 0x001A, 63=003F
1&3=0001&0011=0001=0x1
A&F=1010&1111=1010=0xA
所以最后的结果是0x1a,还是25
1.1.4 二元位运算都有对应的复合赋值运算符
(1) x &= y 相当于 x = x&y
(2) x|=y相当于 x = x|y
(3) x^=y 相当于 x = x^y
1.1.5 ,表达式
,表示式依次计算各操作数的值,并返回最后一个操作数的值。
例
int x=(3,4,5);
printf("%d", x);
最后输出5.
注意,c语言的逗号有三种语义
(1)在变量声明语句中,作为分隔符
例 int x,y,z; /*这里的逗号用作变量名的分隔符*/
(2)函数的参数列表。例
int f(int x, int y); /*这是一个函数声明,逗号用来分隔各形参声明*/
int z =f(1,2); /*这是函数调用语句,逗号用来分隔实参*/
(3)逗号表达式,有时用括号包起来,例
int x=(3,4,5); 赋值的右边是一个逗号表达式,并用括号包起来。
int i,j;
for( i=0, j=0; i<5 ;++i, ++j ) /*这里有两个逗号表达式i=0, j=0和
++i, ++j*/
printf(“%d”, i+j);
1.1.6 运算符优先级列表(由高到低)
优先级 |
运算符 |
功能 |
结合性 |
举例 |
1 |
() |
括号表达式 函数调用语句 |
从左到右 |
(1+2) pow(10,2) |
|
[] |
下标运算 |
|
|
|
. |
直接存取结构成员 |
|
|
|
-> |
间接存取结构成员 |
|
|
2 |
! |
逻辑取反 |
从右到左 |
!3 |
|
~ |
位运算取反 |
|
~0 |
|
- |
数学变号 |
|
-1 |
|
++ |
自增 |
|
++x; x++; |
|
-- |
自减 |
|
x—; --x; |
|
& |
取地址 |
|
|
|
* |
取内容 |
|
|
|
sizeof( |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|