第2章 数据类型与运算符(6)

2020-02-21 22:45

博学谷——让IT教学更简单,让IT学习更有效

6、 位运算符“>>”就是将操作数所有二进制位向右移动一位。运算时,左边的空位根据原数的符号位补0或者1(原来是负数就补1,是正数就

补0)。

例如一个byte的数字11用二进制表示为00001011,将它右移一位,具体演算过程如下:

00001011 >>1 —————————

00000101

运算结果为00000101,对应数值5。

为了帮助大家更好地学习位运算符,接下来通过一个案例来了解位运算符的使用,具体如例2-14所示。 例2-14

1 #include 2 void main() 3 { 4 5 6 }

int a = 13, b = 6;

printf(\

运行结果如图2-20所示。

图2-20 运行结果

从图2-20中可以看出,位运算的结果被打印出来了。变量a的值是13,转换成二进制数是1101;变量b的值是6,转换成二进制数是110。语句a&b的演算过程如下所示:

0110

—————————

0100

运算结果为0100,转换成十进制数是4。语句a^b的演算过程如下所示:

1101 ^

0110

—————————

1011

运算结果为1011,转换成十进制数是13。

&

1101

?多学一招:通过位运算取模

假设有个char型变量,现将其模4,求返回值。

首先我们看出,4的二进制数是100,所以将变量模4就是保持这个变量的二进制数的前2位不变,其余位变为0。

例如当变量的值为27时,此时该变量的二进制数是00011011,若想保证前2位不变而其余位变为0,我们可以用按位与运算符“&”,具体过程如下所示:

00011011 &

00000011 —————————

00000011

26

博学谷——让IT教学更简单,让IT学习更有效

最终结果是3。

现在我们修改条件,要求模16。此时我们依然可以看出,16的二进制数是10000,我们只需保证变量的前4位不变即可,具体过程如下所示:

00011011 &

00001111 —————————

00001011

最终结果是11。

由此我们可以得出结论,变量i模2的n次方的值可以用下面的方式表示: (i % 2 ^ n)与( i & (2 ^ n – 1))相等。

2.4.9 sizeof运算符

同一种数据类型在不同的编译系统中所占空间不一定相同,例如,在基于16位的编译系统中,int类型占用2个字节,而在32位的编译系统中,int类型占用4个字节。为了获取某一数据或数据类型在内存中所占的字节数,C语言提供了sizeof运算符,使用sizeof运算符获取数据字节数,其基本语法规则如下所示:

sizeof(数据类型名称); 或

sizeof(变量名称);

为了帮助大家更好地学习sizeof运算符,接下来通过一个案例来计算每种数据类型所占内存的大小,具体如例2-15所示。 例2-15

1 #include 2 void main() 3 { 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 }

// 通过类型名称计算各基本数据类型所占内存大小 printf(\ %d\\n\printf(\ %d\\n\printf(\ %d\\n\printf(\ %d\\n\printf(\

printf(\ %d\\n\printf(\printf(\ %d\\n\printf(\ %d\\n\// 通过变量名称计算变量所属数据类型占用内存大小 int val_int = 100;

double val_double = 100000.0;

printf(\ %d\\n\printf(\

运行结果如图2-21所示。

27

博学谷——让IT教学更简单,让IT学习更有效

图2-21 运行结果

从图2-21中可以看出,不同数据类型在内存中所占字节数都打印了出来,由此可见,使用sizeof关键字可以很方便地获取到数据或数据类型在内存中所占的字节数。除此之外,同学们还可以在Linux平台上用sizeof()运算符求出这些数据类型所占的大小。

2.4.10 运算符的优先级

在对一些比较复杂的表达式进行运算时,要明确表达式中所有运算符参与运算的先后顺序,这种顺序称作运算符的优先级。表2-15列出了C语言中运算符的优先级,数字越小优先级越高。

表2-15 运算符优先级

优先级 1 2 3 4 5 6 7 8 9 10 11 12 13 14 运算符 . [] () ++ -- ~ ! (数据类型) * / % + - << >> >>> < > <= >= == != & ^ | && || ?:(三目运算符) = *= /= %= += -= <<= >>= >>>= &= ^= |= 根据表2-15所示的运算符优先级,分析下面代码的运行结果。

int a =2; int b = a + 3*a; printf(\

以上代码的运行结果为8,这是由于运算符“*”的优先级高于运算符“+”,因此先运算3*a,得到的结果是6,再将6与a相加,得到最后的结果8。

28

博学谷——让IT教学更简单,让IT学习更有效

int a =2; int b = (a+3) * a; printf(\

以上代码的运行结果为10,这是由于运算符“()”的优先级最高,因此先运算括号内的a+3,得到的结果是5,再将5与a相乘,得到最后的结果10。

其实没有必要去刻意记忆运算符的优先级。编写程序时,尽量使用括号“()”来实现想要的运算顺序,以免产生歧义。

?多学一招:运算符优先级口诀

虽然运算符优先级的规则较多,但也有口诀来帮助记忆,完整口诀是“单算移关与,异或逻条赋”,具体解释如下所示: ① “单”表示单目运算符:逻辑非(!)、按位取反(~)、自增(++)、自减(--)、取地址

(&)、取值(*);

② “算”表示算术运算符:乘、除、求余(*,/,%)级别高于加减(+,-); ③ “移”表示按位左移(<<)和位右移(>>);

④ “关”表示关系运算符:大小关系(>,>=,<,<=)级别高于相等不相等关系(==,!=); ⑤ “与”表示按位与(&); ⑥ “异”表示按位异或(^); ⑦ “或”表示按位或(|);

⑧ “逻”表示逻辑运算符,逻辑与(&&)级别高于逻辑或(||); ⑨ “条”表示条件运算符(? :);

⑩ “赋”表示赋值运算符(=,+=,-=,*=,/=,%=,>>=,<<=,&=,^=,|=,!=); 需要注意的是,三目运算符(,)级别最低,口诀中没有表述,需另外记忆。

2.5 本章小结

本章主要讲解了C语言中的数据类型以及运算符。其中包括进制、基本数据类型、类型转换、运算符与表达式等。通过本章的学习,读者可以掌握C语言中数据类型及其运算的一些相关知识。熟练掌握本章的内容,可以为后面的学习打下坚实的基础。

在学习本章知识的过程中,初学者可能会遇到各种各样的问题,例如 “十进制如何转换成二进制”、“单精度和双精度浮点型的区别”、“前置 和后置自增自减运算符的区别”等。针对上述问题初学者可以扫描右侧 二维码关注问答精灵,让问答精灵帮你解决学习中的困难。

29

博学谷——让IT教学更简单,让IT学习更有效

2.6 习题

一、填空题

1、八进制必须以_____开头,十六进制必须以_______开头。 2、标识符只能由字母、数字和_______组成。

3、在计算机中的二进制表现形式有三种,分别是_____、_______、________。 4、C语言中的数据类型可分为4种,分别是基本类型、______、指针类型、_____。5、C语言提供了sizeof运算符,该运算符主要用于________。 二、判断题 1、执行语句 ++i; i=3; 后变量i的值为4。

2、隐式类型转换是指将取值范围大的数据类型转换为数据取值范围小的数据类型。 3、C 语言中的逻辑值“真”是用1表示的,逻辑值“假”是用0表示的。 4、C语言中赋值运算符比关系运算符的优先级高。

5、位运算符是专门针对数字0和1进行操作的。

三、选择题

1、下列选项中,可以正确定义C语言整型常量是?

A、32L B、51000 C、-1.00 D、567

2、算术运算符、赋值运算符和关系运算符的运算优先级按从高到低依次为? A、算术运算、赋值运算、关系运算 B、算术运算、关系运算、赋值运算 C、关系运算、赋值运算、算术运算 D、关系运算、算术运算、赋值运算 3、设整型变量 m,n,a,b,c,d 均为1,执行 (m=a>b)&&(n=c>d)后, m,n 的值是? A、0,0 B、0,1 C、1,0 D、1,1

4、若已定义 x 和 y为double 类型,则表达式 x=1;y=x+3/2 的值是?

30

博学谷——让IT教学更简单,让IT学习更有效

A、1 B、2 C、2.0 D、2.5

5、假设a=1,b=2,c=3,d=4则表达式a

1、请列举几个单目运算符、双目运算符、三目运算符并说明其区别? 2、请简述自增运算符放在变量前面和后面的区别? 五、编程题

1、已知梯形的上底为a,下底为b,高为h,请用程序实现求梯形的面积。2、请使用位运算符实现交换两个变量值的功能。

31


第2章 数据类型与运算符(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:提高守法意识 预防职务犯罪-农村基层组织人员职务犯罪预防警示教

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: