bokee.net

其他职业博客

正文 更多文章

表达式和优先级(一)——第十七课

1.1.1          课前练习

(1)将下列数字化为16位二进制数字和416进制数字

     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          位运算

~ 取反,1001.

  ~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,有一个是11

   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) |=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(

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

分享到:

上一篇:while——第十六课

下一篇:LIKE团