实验四运算符与表达式(二)一实验目的1)熟悉C语言增1和减1运算符的基本使用方法;2)掌握C语言位运算符的基本使用方法;3)掌握C语言三目运算符的基本使用方法;4)熟悉C语言赋值运算符的数据类型转换二程序示例[源程序4-1]增1和减1运算符的使用1#include<stdio.h>2int main()3{4int a = 10;5float b = 10.5;67printf("a++ = %d In", a++);8printf("++a = %d In", ++a);9printf("--b = %f \n", --b);10printf("b-- = %f \n", b--);1112return 0;13)[程序输出]a++ = 10++a = 12--b=9.500000b--=9.500000[程序分析]本例主要演示语言中增1和减1运算符的基本使用方法
实验四 运算符与表达式(二) 一 实验目的 1) 熟悉 C 语言增 1 和减 1 运算符的基本使用方法; 2) 掌握 C 语言位运算符的基本使用方法; 3) 掌握 C 语言三目运算符的基本使用方法; 4) 熟悉 C 语言赋值运算符的数据类型转换。 二 程序示例 [源程序 4-1] 增 1 和减 1 运算符的使用 1 #include <stdio.h> 2 int main() 3 { 4 int a = 10; 5 float b = 10.5; 6 7 printf("a++ = %d \n", a++); 8 printf("++a = %d \n", ++a); 9 printf("-b = %f \n", -b); 10 printf("b- = %f \n", b-); 11 12 return 0; 13 } [程序输出] a++ = 10 ++a = 12 -b = 9.500000 b- = 9.500000 [程序分析] 本例主要演示 C 语言中增 1 和减 1 运算符的基本使用方法
程序第4行首先定义整型变量a,并初始化为10,第5行定义单精度浮点型数据b,并初始化为10.5。程序第7行的a++运算为先进行当前语句的操作,再进行变量a的加1操作,所以程序输出第一行的结果为10,语句执行后a的值为11。程序第8行的++a运算为先进行变量a的加1操作,再进行当前语句的操作,所以程序输出第二行的结果为12,语句执行后a的值为12。程序第9行的--b运算为先进行变量b的减1操作,再进行当前语句的操作,所以程序输出第三行的结果为9.500000,语句执行后b的值为9.5。程序第10行的b--运算为先进行当前语句的操作,再进行变量b的减1操作,所以程序输出第四行的结果为9.500000,语句执行后b的值为8.5。关于加1(自增运算)和减1(自减运算)运算需要注意以下几点:1、运算完成后,会用新值替换旧值,将新值保存在当前变量中2、自增自减的结果必须得有变量来接收,所以自增自减只能针对变量,不能针对数字,例如10++就是错误的。3、需要重点说明的是,++在变量前面和后面是有区别的:a)++在前面叫做前自增(例如++a)。前自增先进行自增运算,再进行其他操作。b)++在后面叫做后自增(例如a++)。后自增先进行其他操作,再进行自增运算。[源程序4-2]位运算符的使用1#include<stdio.h>2int main()3{4inta=12,b=25;5int num =8,i= 1;67printf("a&b=%d)n",a&b);8printf("a|b = %d)n", a|b);9printf("ab=%d)n",a^b);10printf("~a =%d)n",~a);11printf("Rightshiftby%d:%d\n",i,num>>i);1213returnO;141
程序第 4 行首先定义整型变量 a,并初始化为 10,第 5 行定义单精度浮点型 数据 b,并初始化为 10.5。 程序第7行的a++运算为先进行当前语句的操作,再进行变量a的加1操作, 所以程序输出第一行的结果为 10,语句执行后 a 的值为 11。 程序第8行的++a运算为先进行变量a的加1操作,再进行当前语句的操作, 所以程序输出第二行的结果为 12,语句执行后 a 的值为 12。 程序第 9 行的-b 运算为先进行变量 b 的减 1 操作,再进行当前语句的操作, 所以程序输出第三行的结果为 9.500000,语句执行后 b 的值为 9.5。 程序第10行的b-运算为先进行当前语句的操作,再进行变量b的减1操作, 所以程序输出第四行的结果为 9.500000,语句执行后 b 的值为 8.5。 关于加 1(自增运算)和减 1(自减运算)运算需要注意以下几点: 1、 运算完成后,会用新值替换旧值,将新值保存在当前变量中 2、 自增自减的结果必须得有变量来接收,所以自增自减只能针对变量,不 能针对数字,例如 10++就是错误的。 3、 需要重点说明的是,++ 在变量前面和后面是有区别的: a) ++在前面叫做前自增(例如 ++a)。前自增先进行自增运算,再进行 其他操作。 b) ++ 在后面叫做后自增(例如 a++)。后自增先进行其他操作,再进行 自增运算。 [源程序 4-2] 位运算符的使用 1 #include <stdio.h> 2 int main() 3 { 4 int a = 12, b = 25; 5 int num = 8, i = 1; 6 7 printf("a&b = %d\n", a&b); 8 printf("a|b = %d\n", a|b); 9 printf("a^b = %d\n", a^b); 10 printf("~a = %d\n",~a); 11 printf("Right shift by %d: %d\n", i, num>>i); 12 13 return 0; 14 }
[程序输出]a&b=8a|b = 29a^b=21~a=-13Rightshiftby1:4[程序分析]本例主要演示C语言中位运算符的基本使用方法。程序第4行定义整型变量a和b,并分别初始化为12和25,第5行定义整型变量num和i,并分别初始化为8和1。需要注意的是,位运算符均基于操作数的二进制补码进行。程序第7行输出a按位与b的结果,按位与运算符“&”是双目运算符,其功能是参与运算的两数各对应的二进位相与,即只有对应的两个二进制位均为1时,结果位才为1,整型变量12的补码为1100,整型变量25的补码为11001,所以两者按位与的结果为1000,即为十进制8。程序第8行输出a按位或b的结果,按位或运算符“"是双目运算符,其功能是参与运算的两数各对应的二进位相或,即只有对应的两个二进制位均为0时,结果位才为0,整型变量12的补码为1100,整型变量25的补码为11001,所以两者按位或的结果为11101,即为十进制29。程序第9行输出a按位异或b的结果,按位异或运算符“"是双目运算符,其功能是参与运算的两数各对应的二进位相异或,即只有对应的两个二进制位不同时,结果位为1,否则结果位为0。整型变量12的补码为1100,整型变量25的补码为11001,所以两者按位异或的结果为10101,即为十进制21。程序第10行输出a按位取反结果,按位取反运算符~"是单目运算符,其功能是参与运算的操作数对应的二进位按位取反,即1变0,0变1。整型变量12的补码为1100,按位取反的结果为11111111111111111111111111110011(32位系统),最高位为1,求值的时候,需要先把二进制的值按位取反,然后加1得到负数绝对值(相反数)的二进制码,然后转为10进制,加上负号即可。即为十进制-13。程序第11行输出num按位右移i位的结果。整型变量num的补码为1000,i=1,即按位右移1位后,num的数值变为0100,即为十进制4。同理还有按位左移等操作
[程序输出] a&b = 8 a|b = 29 a^b = 21 ~a = -13 Right shift by 1: 4 [程序分析] 本例主要演示 C 语言中位运算符的基本使用方法。 程序第 4 行定义整型变量 a 和 b,并分别初始化为 12 和 25,第 5 行定义整 型变量 num 和 i,并分别初始化为 8 和 1。 需要注意的是,位运算符均基于操作数的二进制补码进行。 程序第 7 行输出 a 按位与 b 的结果,按位与运算符“&”是双目运算符,其功 能是参与运算的两数各对应的二进位相与,即只有对应的两个二进制位均为 1 时,结果位才为 1,整型变量 12 的补码为 1100,整型变量 25 的补码为 11001, 所以两者按位与的结果为 1000,即为十进制 8。 程序第 8 行输出 a 按位或 b 的结果,按位或运算符“|”是双目运算符,其功 能是参与运算的两数各对应的二进位相或,即只有对应的两个二进制位均为 0 时,结果位才为 0,整型变量 12 的补码为 1100,整型变量 25 的补码为 11001, 所以两者按位或的结果为 11101,即为十进制 29。 程序第 9 行输出 a 按位异或 b 的结果,按位异或运算符“^”是双目运算符, 其功能是参与运算的两数各对应的二进位相异或,即只有对应的两个二进制位不 同时,结果位为 1,否则结果位为 0。整型变量 12 的补码为 1100,整型变量 25 的补码为 11001,所以两者按位异或的结果为 10101,即为十进制 21。 程序第 10 行输出 a 按位取反结果,按位取反运算符“~”是单目运算符,其功 能是参与运算的操作数对应的二进位按位取反,即 1 变 0,0 变 1。整型变量 12 的补码为 1100,按位取反的结果为 1111 1111 1111 1111 1111 1111 1111 0011(32 位系统),最高位为 1,求值的时候,需要先把二进制的值按位取反,然后加 1 得到负数绝对值(相反数)的二进制码,然后转为 10 进制,加上负号即可。即为 十进制-13。 程序第 11 行输出 num 按位右移 i 位的结果。整型变量 num 的补码为 1000, i=1,即按位右移 1 位后,num 的数值变为 0100,即为十进制 4。同理还有按位 左移等操作
[源程序4-3]三目运算符的使用1#include <stdio.h>2int main()314int n1 = 5, n2 = 10,max;56max=(n1>n2)?n1:n2;78printf("Largestnumberbetween"9"%d and %d is %d.",10n1, n2, max);1112return O;13}[程序输出]Largest number between 5 and 10 is 10.[程序分析]本例主要演示C语言中三目运算符的基本使用方法。程序第4行定义三个整型变量n1,n2和max,并分别将n1和n2初始化为5和10。三目运算符判断条件表达式的真值,若为真则执行“?”号后的第一个表达式,否则执行第二个表达式流程可参考下图:true(condition)?expression1:expression2false因此,由于n1<n2,所以表达式结果为False,执行Expression3,三目表达式变为max=n2。注意:当有多个三目运算符时,按从右至左的顺序运算。例如,下面两个表达式是等价的:a<b?b:c>b?c:b;a<b?b:(c>b?c:b);此外,还应注意本例中的printf采用了多行写法
[源程序 4-3] 三目运算符的使用 1 #include <stdio.h> 2 int main() 3 { 4 int n1 = 5, n2 = 10, max; 5 6 max = (n1 > n2) ? n1 : n2; 7 8 printf("Largest number between" 9 " %d and %d is %d. ", 10 n1, n2, max); 11 12 return 0; 13 } [程序输出] Largest number between 5 and 10 is 10. [程序分析] 本例主要演示 C 语言中三目运算符的基本使用方法。 程序第 4 行定义三个整型变量 n1,n2 和 max,并分别将 n1 和 n2 初始化为 5 和 10。 三目运算符判断条件表达式的真值,若为真则执行“?”号后的第一个表达 式,否则执行第二个表达式流程可参考下图: 因此,由于 n1<n2,所以表达式结果为 False,执行 Expression3,三目表达 式变为 max=n2。 注意:当有多个三目运算符时,按从右至左的顺序运算。例如,下面两个表 达式是等价的: a < b ? b : c > b ? c : b ; a < b ? b : ( c > b ? c : b ) ; 此外,还应注意本例中的 printf 采用了多行写法
[源程序4-4]赋值运算符1#include<stdio.h>2int main()3{4inta,c,b=322;5.float x,y=8.88;6char c1='k',c2;7a=y;8x=b;9c=c1;10c2=b;11printf("a=%d, x=%f, c=%d, c2=%c In", a, X, C, c2);12return O;13}[程序输出]a=8,x=322.000000,c=107,c2=B[程序分析]本例主要演示C语言中赋值运算符数据类型转换的基本规则。程序第4行定义三个整型变量a,c和b,并将b初始化为322,程序第5行定义两个单精度浮点型变量x和y,并将y初始化为8.88,程序第6行定义两个字符型变量c1和c2,并将c1初始化为字符k。程序第7行,a为整型,赋予实型量y值8.88后只取整数8。程序第8行,×为实型,赋予整型量b值322,后增加了小数部分。程序第9行,字符型量c1赋予a变为整型。程序第10行,整型量b赋予c2后取其低八位成为字符型(b的低八位为01000010,即十进制66,按ASCII码对应于字符B)。三、程序编写1、编写控制台程序,在不使用第三个变量的前提下,分别使用算术运算符和按位异或运算符实现两种交换两个整型数据数值的方法。2、编写控制台程序,使用三目运算符?:,找到两个整数的最大值并输出
[源程序 4-4] 赋值运算符 1 #include <stdio.h> 2 int main() 3 { 4 int a,c,b=322; 5 float x,y=8.88; 6 char c1='k',c2; 7 a=y; 8 x=b; 9 c=c1; 10 c2=b; 11 printf("a=%d, x=%f, c=%d, c2=%c \n", a, x, c, c2); 12 return 0; 13 } [程序输出] a=8, x=322.000000, c=107, c2=B [程序分析] 本例主要演示 C 语言中赋值运算符数据类型转换的基本规则。 程序第 4 行定义三个整型变量 a,c 和 b,并将 b 初始化为 322,程序第 5 行定义两个单精度浮点型变量 x 和 y,并将 y 初始化为 8.88,程序第 6 行定义两 个字符型变量 c1 和 c2,并将 c1 初始化为字符’k’。 程序第 7 行,a 为整型,赋予实型量 y 值 8.88 后只取整数 8。 程序第 8 行,x 为实型,赋予整型量 b 值 322,后增加了小数部分。 程序第 9 行,字符型量 c1 赋予 a 变为整型。 程序第 10 行,整型量 b 赋予 c2 后取其低八位成为字符型(b 的低八位为 01000010,即十进制 66,按 ASCII 码对应于字符 B)。 三、程序编写 1、编写控制台程序,在不使用第三个变量的前提下,分别使用算术运算符和按 位异或运算符实现两种交换两个整型数据数值的方法。 2、编写控制台程序,使用三目运算符?:,找到两个整数的最大值并输出