首页 > 学院 > 开发设计 > 正文

表达式和基本语句与位运算

2019-11-11 01:25:38
字体:
来源:转载
供稿:网友


表达式和基本语句

 

①if语句 (分支:单分支、双分支、多分支)

if 语句是C 语言中最简单、最常用的语句,然而很多程序员用隐含错误的方式写if语句;

布尔变量与零值比较、整型变量与零值比较、浮点变量与零值比较、指针变量与零值比较

 

②while,for语句

C++/C 循环语句中,for 语句使用频率最高,while语句其次,do语句很少用。

在多重循环中,如果有可能,应当将最长的循环放在最内层,最短的循环放在最外层,以减少CPU跨切循环层的次数;

如果循环体内存在逻辑判断,并且循环次数很大,宜将逻辑判断移到循环体的外面;

 

③switch开关语句

switch语句可以产生具有多个分支的控制流程。

   它的格式是:

      switch(控制表达式)

     {

         case常量表达式:语句列表

         case常量表达式:语句列表

          ...

        default:语句列表

     }

每个case语句的结尾不要忘了加break,否则将导致多个分支重叠(除非有意使多个分支重叠);

不要忘记最后那个default分支。即使程序真的不需要default处理,也应该保留语句 default : break;这样做并非多此一举,而是为了防止别人误以为你忘了default处理。

 

④goto语句(流程转向)

由于goto语句可以灵活跳转,如果不加限制,它的确会破坏结构化设计风格。其次,goto语句经常带来错误或隐患。它可能跳过了某些对象的构造、变量的初始化、重要的计算等语句.

 

 

位运算及其运算符

①按位与──& (1)格式:x&y (2)规则:对应位均为1时才为1

 (3)主要用途:取(或保留)1个数的某(些)位,其余各位置0。

②按位或──|   (1)格式:x|y   (2)规则:对应位均为0时才为0,否则为1

   (3)主要用途:将1个数的某(些)位置1,其余各位不变。

 

③按位异或──^

(1)格式:x^y

(2)规则:对应位相同时为0,不同时为1:3^9=10。

(3)主要用途:使1个数的某(些)位翻转(即原来为1的位变为0,为0的变为1),其余各位不变。

 

④按位取反──~

(1)格式:~x

(2)规则:各位翻转,即原来为1的位变成0,原来为0的位变成1:在IBM-PC机中,~0=0xffff,~9=0xfff6。

(3)主要用途:间接地构造一个数,以增强程序的可移植性。

 

⑤按位左移──<<

(1)格式:x<<位数

(2)规则:使操作数的各位左移,低位补0,高位溢出:5<<2=20。

 

⑥按位右移──>>

(1)格式:x>>位数

(2)规则:使操作数的各位右移,移出的低位舍弃;高位:

1)对无符号数和有符号中的正数,补0;

2)有符号数中的负数,取决于所使用的系统:补0的称为“逻辑右移”,补1的称为“算术右移”。例如,20 >> 2=5。

说明:

(1)x、y和“位数”等操作数,都只能是整型或字符型数据。除按位取反为单目运算符外,其余均为双目运算符。

(2)参与运算时,操作数x和y,都必须首先转换成二进制形式,然后再执行相应的按位运算。

(3)实现&、|、^运算主要用途的方法

   1)构造1个整数:该数在要取(或保留)的位、或要置1的位、或要翻转的位上为1,其余均为0。

   2)进行按位与、或按位或、或按位异或操作。

(4)实现按位取反主要用途的方法

   1)求~0,间接地构造一个全1的数;

   2)按需要进行左移或右移操作,构造出所需要的数。

 

复合赋值运算符

除按位取反运算外,其余5个位运算符均可与赋值运算符一起,构成复合赋值运算符:&=、|+、^=、<<=、>>=

 

不同长度数据间的位运算──低字节对齐,短数的高字节按最高位补位:

(1)对无符号数和有符号中的正数,补0;

(2)有符号数中的负数,补1。

 

位段的概念与定义    所谓位段类型,是一种特殊的结构类型,其所有成员均以二进制位为单位定义长度,并称成员为位段。

 

说明

(1)因为位段类型是一种结构类型,所以位段类型和位段变量的定义,以及对位段(即位段类型中的成员)的引用,均与结构类型和结构变量一样。

(2)对位段赋值时,要注意取置范围。一般地说,长度为n的位段,其取值范围是:0~(2n-1)。

(3)使用长度为0的无名位段,可使其后续位段从下1个字节开始存储。

 

 


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表