图4.18程序运行结果设有3 个学生的4 门课成绩,求每个学生4 门课程的总评成绩、3 个学生每门课程的平均成绩。图4.19程序运行结果挑战节目主持人。图4.20程序运行结果联合国排名是以国家名的英文字母排序,社会上也常以姓氏的汉语拼音字母排序。就这样,用字符数组min 依次与新输入的字符串比较,直到输入字符串为空时为止。图4.21程序运行结果......
2025-09-30
下面介绍6 种位运算符的运算与应用。在进行位运算之前,需把参加位运算的对象的值转换为二进制数。
1.按位取反运算
按位取反(~)是位运算中唯一的一个单目运算符,运算对象置于运算符的右边,其运算功能是把运算对象的内容按位取反,即每一位上的0 变1、1 变0。例如:
a=00011010, ~a=11100101
2.左移运算
左移运算符(<<)用于将一个数的各个二进制位全部向左平移若干位(左边移出的部分忽略,右边补0)。
若a=15,即二进制数位00001111,执行语句a=a<<2,左移2 位得00111100,即十进制数60。
左移1 位相当于该数乘以2,左移2 位相当于该数乘以4,但此结论只适用于该数左移时被溢出舍弃的高位中不包含1 的情况。例如:
左移比乘法运算快得多,有些编译程序自动将乘以2 的运算用左移1 位来实现,将乘2n的幂运算处理为左移n 位。
3.右移运算
右移运算符(>>)用于将一个数的各个二进制位全部向右平移若干位(右边移出的部分忽略,左边对无符号数补0,有符号数补符号位)。
每右移1 位,相当于除2,右移n 位相当于除2n。例如:
4.按位与运算
按位与运算符(&)将其两边数据对应的二进制位按位进行与运算。与逻辑与运算规则一致,两者都为1 则结果为1,否则为0。例如:
结论:与1 按位与为1,那么该位为1;与1 按位与为0,那么该位为0。所以,与1 按位与可用于检测某个位是1 还是0。
按位与还可进行清零、取指定位、保留指定位等特殊用途。
清零,即使全部二进制位置为0,只要找一个二进制数,其中各个位符合条件:原来的数中为1 的位,新数中相应的位为0,其他位不考虑,然后使二者进行&运算,即可达到清零的目的。
取指定位,即取一个数中的某些指定位。若有一个整数a(2 字节)。想取其中的低字节数,只需将a 与(377)8 按位与即可。若想取两个字节中的高字节,只需a 与(177400)8 按位与 即可。
保留指定位,若想将哪一位保留下来,就与一个数进行&运算,此数在该位取1,其余位为0。
5.按位或运算
按位或运算符(|)将其两边数据对应的二进制位按位进行或运算。与逻辑或运算规则一致,二者只要有1 个为1 则结果为1;否则为0(两者都为0 时为0)。例如:(https://www.chuimin.cn)
结论:与0 按位或为1,那么该位为1;与0 按位或为0,那么该位位0。就是说任何位与0 按位或还是等于这一位(保持不变)。
按位或运算常用将一个数据的某些位定值为1。例如,a 是一个整数(16 位),有表达式a|0377,则低8 位值全为1,高8 位保持不变。
6.按位异或运算
按位异或运算(^)也称XOR 运算。将其两边数据对应的二级制位按位进行异或运算,若二者相同,结果为0,若二者不同(相异),结果为1。例如:
结论:任何位与1 按位异或,等价于对该位取反。
异或运算符的应用:
(1)使用按位异或运算,可使特定位翻转。例如,假设有数0111 1010,想使其低4 位翻转,即1 变0,0 变1,可以将其与0000 1111 进行异或运算即可。
结果值的低4 位正好是原值低4 位的翻转。要使哪几位翻转就将其进行异或运算的哪几位置为1 即可。
(2)与0 异或,保留原值。
(3)交换两个值,不用临时变量。
假如要将a 和b 的值交换,可以用以下赋值语句来实现。
【例8.1】使用位操作实现将一个十进制整数转换为二进制数输出。程序分析:
设置一个屏蔽字,其中只有一位为1,其余位为0,为1 的位为测试位。将此屏蔽字与被转换数进行按位与运算,根据运算结果判断被测试位是1 还是0。循环测试(一个整数2 个字节,16 位,测试16 次,从最高位开始测试,每次测试后屏蔽字右移1 位以便测试下一位)并输出测试结果就是整数对应的二进制数。
程序代码如下:
程序运行结果如图8.1 所示。
图8.1 进制转换程序运行结果
相关文章
图4.18程序运行结果设有3 个学生的4 门课成绩,求每个学生4 门课程的总评成绩、3 个学生每门课程的平均成绩。图4.19程序运行结果挑战节目主持人。图4.20程序运行结果联合国排名是以国家名的英文字母排序,社会上也常以姓氏的汉语拼音字母排序。就这样,用字符数组min 依次与新输入的字符串比较,直到输入字符串为空时为止。图4.21程序运行结果......
2025-09-30
在例7.8 中采用动态分配的办法为一个结构分配内存空间。某学生退学,可删去该结点,释放该结点占用的存储空间。这样一种连接方式,在数据结构中称为“链表”。其示意如图7.10 所示。图7.10链表示意图图7.10 中,head 是一个指针变量,存放第一个结点的首地址。链表中的每一个结点有同一种结构类型。例如一个存放学生学号和成绩的结点的结构如下:前两个成员项组成数据域,后一个成员项next 构成指针域,是一个指向stu 类型结构的指针变量。......
2025-09-30
在C 语言程序中,是通过对函数的调用来执行函数体,其过程与子程序调用相似。在调用函数时,大多数情况下主调函数和被调函数之间有数据传递。图5.2程序运行结果函数调用在程序中起一个表达式或者语句的作用。在调用函数时,有3 种不同的方式。这就要求该函数必须是有返回值的。getchar 函数调用作为表达式使用,即赋值表达式的右操作。......
2025-09-30
在C 语言中,具有一定功能、相对独立的程序段称为函数。无论主函数main()位于程序中的什么位置,程序执行时总是从main()开始。C 语言程序的一般结构如图5.1 所示。它具有以下特点:图5.1C 程序中的函数C 语言允许一个程序由多个源文件组成,每个源文件可以独立编译,一个源文件可以被不同的程序使用。一个C 程序有且仅有一个主函数main,主函数可以放在任何一个源文件中,程序总是从主函数开始执行。......
2025-09-30
C 语言中,赋值被认为是一种运算,有赋值运算符将一个变量和一个表达式连接起来的式子称为赋值表达式。其形式为:1.赋值运算符赋值运算符为“=”,功能是将赋值运算符右边的表达式的值赋给其左边的变量。......
2025-09-30
例如:a*b/c-pow(d,3)是一个合法的算术表达式。算术表达式不允许有分子分母的形式。算术运算符中,*、/、%这三个运算符优先级相同,同时出现时从左至右计算。+、-运算符优先级低于*、/、%运算符,结合方向也是自左至右。计算算术表达式时,要按照对应运算符的优先级和结合性进行处理。......
2025-09-30
自增、自减运算符是C 语言中最具特色的两个单目运算符,其操作对象只有一个,这两个运算符既可以放在操作数之前,也可以放在操作数之后。自增、自减运算符的结合方向为自右至左。......
2025-09-30
程序中的每个“变量灯”的“功率”大小不一,因此它们的作用域就不相同了。这一点表明形参变量只有在函数内才是有效的,这种变量的有效范围称变量的作用域。变量说明的方式不同,其作用域也不同。在内部变量的作用域内,外部变量将被屏蔽而不起作用。外部变量说明的一般格式:外部变量的作用域是从定义位置到本源文件结束。......
2025-09-30
相关推荐