sizeof运算符的功能是返回其所测试的数据对象所占存储单元的字节数。例如,sizeof的值为1。使用sizeof运算符时需要注意以下两点:①使用sizeof运算符的目地是获取任何数据对象所占内存单元的字节数,使得程序自适应于所用系统的存储分配机制。②如果被测试的对象是一个表达式,sizeof不会对表达式进行具体的运算,而只是判断该表达式的最终数据类型,并以此求出所需要的存储空间。sizeof运算符示例。......
2023-11-20
C语言中,提供了用于二进制位操作的运算符以及复合运算符对程序设计中的位运算提供支持,见表11.1。
表11.1 C语言中的位运算符
1.按位与运算符(&)
按位与运算符(&)是一个双目运算符,其功能是:将参加操作的两个对象的各个二进制位分别对应进行“与”运算,即:两者都为1时结果为1,否则结果为0。
按位与运算通常用来对被操作数据对象的某些位清0或保留某些位。例如,把整型变量a的高16位清0,保留数据的低16位,可以对变量a进行a&65535运算(65535对应的二进制数为00000000000000001111111111111111)。位运算的表达式中,描述整型常量时使用16进制书写形式更为方便和简单明了,例如,a&65535可以用十六进制常数的形式写为a&0xffff。
【例11.4】 按位与运算示例。
运行该程序,当输入数据为:128,64时,结果为x&y=0。其运算过程为:
2.按位或运算符(|)
按位或运算符(|)是一个双目运算符,其功能是:将参加操作的两个对象的各个二进制位分别对应进行“或”运算,即:两者都为0时结果为0,否则结果为1。
按位或运算常用来将被操作数某些位置1,而保持其他位不变。例如,把整型变量a的低16位置1,保留高16位,可以通过对变量a施加a|0xffff运算实现(0xffff对应的二进制数为00000000000000001111111111111111)。
【例11.5】 按位或运算示例。
运行该程序,当输入数据为:128,64时,结果为x|y=192。其运算过程为:
3.按位异或运算符(^)
按位异或运算符(^)是一个双目运算符,其功能是:将参加操作的两个对象的各个二进制位分别对应进行“异或”运算,运算规则为:两者值相同时结果为0,否则结果为1。
按位异或运算常用于将被操作数某些特定位的值取反,例如,把整型变量a的低16位值取反,保留高16位,可以通过对变量a施加a^0xffff运算实现(0xffff对应的二进制数为
00000000000000001111111111111111)。
【例11.6】 按位异或运算示例。
运行该程序,当输入数据为:128,64时,结果为x^y=192。其运算过程为:
4.按位取反运算符(~)
按位取反运算符(~)是一个单目运算符,其功能是:将参加操作的对象的各个二进制位进行“取反”操作,即:0变为1,1变为0。
【例11.7】 按位取反运算示例。
运行该程序,当输入数据为:128时,结果为~x=4294967167。其运算过程为:
5.左移运算符(<<)
左移运算符(<<)是一个双目运算符,其功能是:将参加操作的左操作数的全部二进制位向左移动右操作数指定的位数,左移出去的数位丢失,左移后数的右边补0。例如,a<<3表示将a中的各位全部向左移动3位。在计算机系统中,只要没有出现溢出现象(即移位后的数据仍在取值范围之内),那么某数左移一位相当于将该数乘2,左移两位相当于将该数乘4,以此类推。
【例11.8】 左移运算示例。(www.chuimin.cn)
运行该程序,当输入数据为:128,移动位数为:2时,结果为x<<2=512。其运算过程为:
当输入数据为:128,移动位数为:25时,出现溢出现象,结果为x<<25=0。其运算过程为:
6.右移运算符(>>)
右移运算符(>>)是一个双目运算符,其功能是:将参加操作的左操作数的全部二进制位向右移动右操作数指定的位数,右移出去的数位丢失,右移后左边留下的空位填充取决于左操作对象的数据类型。
①对无符号数据(unsigned char和unsigned int),左边补0。
②对有符号数据(int和char)左边补其符号位,即正数补0、负数补1。
与左移运算类似,如果移位后没有溢出,右移1位相当于将该数除以2。
【例11.9】 右移运算示例。
运行该程序,当输入数据为:128,移动位数为:2时,结果为x>>2=32。其运算过程为:
有关C语言程序设计基础(第3版)的文章
sizeof运算符的功能是返回其所测试的数据对象所占存储单元的字节数。例如,sizeof的值为1。使用sizeof运算符时需要注意以下两点:①使用sizeof运算符的目地是获取任何数据对象所占内存单元的字节数,使得程序自适应于所用系统的存储分配机制。②如果被测试的对象是一个表达式,sizeof不会对表达式进行具体的运算,而只是判断该表达式的最终数据类型,并以此求出所需要的存储空间。sizeof运算符示例。......
2023-11-20
C语言中逻辑运算符及其含义见表3.2。表3.2逻辑运算符及其含义逻辑运算符“&&”和“||”是双目运算符,具有左结合性;“!”表3.3逻辑运算真值表C语言中进行逻辑表达式求值运算时,不但要注意逻辑运算符本身的运算规则,而且还必须要遵循下面的两条原则:·对逻辑表达式从左到右进行求解。......
2023-11-20
图5.7两层函数嵌套调用示意图函数的嵌套调用即一个函数在被调用的过程中又调用了另外的一个函数。函数fac和powers的返回值类型均被设计为double型,其主要目的是为了避免n!x:0.5//0.5从键盘输入的数据0.50 powers of e=1.648721//程序执行结果......
2023-11-20
针对不同的实际应用,数据排序方法有很多种。本节介绍两种常用排序方法的基本思想和实现方法,帮助读者初步理解排序方法的计算机解决思路。②不考虑已排好序的数据,将剩下的数据作为待排序列。编写程序实现冒泡排序算法,对随机生成的10个3位整数按升序进行排序并输出。......
2023-11-20
在C语言中,“=”称为赋值运算符,赋值运算符的左边一定是变量,不能是常量或表达式。赋值表达式可以作为一个运算成分出现在另外的表达式中,从而构成比较复杂的表达式或语句。在赋值表达式计算中,若赋值运算符两边的数据类型不相同时,系统将自动进行类型转换。赋值运算符使用示例。......
2023-11-20
下面的程序示例给出了位运算的一些简单应用。编写程序实现功能:不用临时变量交换两个整型变量的值。编写程序实现功能:利用二进制位运算进行十进制整数到二进制数的转换。如果被转换的十进制数是正数,则其补码与其原码相同,转换时只需要判断出最高位(符号位)以外的所有二进制位,二进制位值为1时输出1,二进制位值为0时输出0即可得到转换后的二进制数据。......
2023-11-20
一个函数直接或间接地调用自己,称为函数的递归调用。所以函数递归调用的实现必须依靠系统提供一个特殊部件(堆栈)存放未完成的操作,以保证当递归调用结束回溯时不会丢失任何应该执行而没有执行的操作。为了理解函数递归调用的特性,参照例5.9的程序讨论函数递归调用的执行过程,为了讨论方便为程序加上行号。函数递归调用示例。......
2023-11-20
例如,有如下所示的C语句序列:则结构体指针变量p1指向结构体数组元素a[2],其关系如图10.2所示。此时应该注意到被指针变量p1指向的结构体数组元素本身是不能作为整体操作的,所以*p1也不能作为整体操作。......
2023-11-20
相关推荐