创建网站时间代码,无锡网络公司服务,怎样上网站建设,会讯通2022官方下载1.运算符 什么是运算符#xff1f; 用来进来某种运算的符号 如#xff1a; - * / (取余#xff0c;取模) a,几目运算符 根据其操作数的不同 单目运算符 该运算符…1.运算符 什么是运算符 用来进来某种运算的符号 如 - * / (取余取模) a,几目运算符 根据其操作数的不同 单目运算符 该运算符只需要带一个操作数 如 -- (取地址符) 双目运算符 该运算符只需要带两个操作数 如 - * / 三目运算符 该运算符需要带三个操作数 如 a?b:c: 如果表达式a为真那么整个表达式的值为b否则整个 表达式的值为c b结合性 决定先算谁后算谁问题 从左到右从右到左 如 结合性从左到右 ab 先算a的值再算b的值 最后再算表达式a表达式b的值 结合性从右到左 ab 先算b的值 再将b的值写到变量a所对应的存储单元中去 例子 在c语言中ab,是否和ba的含义一样呢 不一定why? 如 i5,j6 (i)(ij) 5 66 (ij)(i) (56)5 c优先级 是指在一个含有多个运算符的表达式中先算哪一个运算符再算哪一个运算符。 单目运算符 算术运算符 关系运算符 逻辑运算符 条件运算符 赋值运算符 逗号运算符 1算术运算符 进行算术运算的运算符 - * % / 双目运算符结合性从左到右 例子 5 /4 1整数进行算术运算结果为整数 5.0 / 4 1.25 typeof(5/4) int typeof(5.0/4)double (double)(3/2) 1.0 (double)3/2 1.5 思考 用c语言的表达式来描述数学表达式 数学 a/b c语言中 doublea /b 1.0*a /b %: 取余求模 规定要求两个操作数都必须为整数 5%4 1 5%4.0 ERROR 4%5 4 : 自增运算符 i//先使用i再 i//先再使用i --: 自减运算符 i-- --i 单目要求操作数必须为一个”左值“可写的地址 例子 5 ERROR ab ERROR 表达式 表达式的值 做完这个表达式之后i的值 i i i i1 i i1 i i1 i-- i i i-1 --i i-1 i i-1 例子 1int i 5; a i;//把表达式i的值赋值给a表达式i的值为5 printf(%d\n,a);//5 printf(%d\n,i);//6 int i 5; a i;//把表达式i的值赋值给a表达式i的值为6 printf(%d\n,a);//6 printf(%d\n,i);//6 2i 5; (i)(i)(i) 拒绝做此类题目 因为它没有任何意义 如果老板要你们做这类题目 那就请你将你的BOSS直接炒鱿鱼 2关系运算符 用来判断两个东西关系的运算符大小关系 ! 都是属于双目运算符结合性都是从左到右。 关系表达式用关系运算符连接的式子。 关系表达式的值 关系成立 1 关系不成立 0 例子 表达式 表达式的值 54 1 32 0 0!1 1 543 0 543: 是一个合法的表达式 表达式的含义543 拿表达式54的值与3进行PK 数学含义 54 并且 43 问题 咱们能不能用c语言来描述数学上的543呢 涉及到 ”并且“如何来表达 3逻辑运算符 用来描述逻辑关系的运算符 逻辑非 单目运算符 ”取反“ 真 假 假 真 逻辑与 双目运算符 ”并且“ 结合性从左到右 真真 真 真假 假 假假 假 假真 假 || 逻辑或 双目运算符 ”或者“ 结合性从左到右 真||真 真 真||假 真 假||假 假 假||真 真 逻辑表达式就是用逻辑运算符连接起来的式子 逻辑表达式的值 逻辑真非01 逻辑假 0 例子 a 4, b 5; ab 1 a0 0 35||0 1 !a || b 1 40 || 2 1 53 84-!0 53 84-1 53 83 10 0 练习 用逻辑表达式来判断y输入的年份是否为闰年 1能被4整除但是不能被100整除 2能被400整除 #include stdio.h int main() { int a; printf(请输入年份); scanf(%d, a); if(a%40a%100!0||a%4000) { printf(%d是闰年,a); } else { printf(%d不是闰年,a); } return 0; } 分析一下代码的输出结构 int a,b,c,d,m,n; a 1; b 2; c 3; d 4; m 0; n 0; (mab)||(ncd); printf(%d\n,m);//1 printf(%d\n,n);//0 (mab)(ncd); printf(%d\n,m);//0 printf(%d\n,n);//0 C语言运算符是”惰性运算“ 1abc 只有a为真时才去判断b的值 只有ab都为真才去判断c的值 2a||b||c 只要a为真就不需要再去判断bc的值 只有a为假才需要去判断b的值 只有a和b都为假才需要去判断c的值 如果事先知道表达式的值那么后面的运算符表达式就不需要执行了 这就是c语言运算符的”惰性“ 4位运算符 位运算符是指按bit位来进行运算 位运算符要求操作数必须为整数 有如下 按位与 | 按位或 ~ 按位取反 ^ 按位异或 按位左移 按位右移 除了~是单目之外其他的位运算符都是双目运算符结合性都是从左到右 位运算符操作数只能是整数 所有的位运算都是把操作数变成bit序列然后再按bit位来进行运算 ~(按位取反) 1 - 0 0 - 1 int a ~3; 3: 00000000 00000000 00000000 00000011 ~3 11111111 11111111 11111111 11111100 --a最终再计算机的存储形式 %d: 符号位 -1 逆运算 负数-4 %u: 2^32-4 (按位与) a b ab 1 1 1 0 1 0 1 0 0 0 0 0 如果两个bit操作数都为1其结果才为1否则为0 例子 int a 3 5; 8bits: 0000 0011 (3) 0000 0101 (5) ---------------- 0000 0001 (1) 练习 写一个表达式 假设有一个整型变量a要把a的第5个bit变成0 其他的bit保持不变该怎么操作 a: xxXxxxxx 11011111 ~00100000 ~(15) a a ~(15); 结论 一个bit位与0进行”按位与“的操作结果为0 x0 0 一个bit位与1进行”按位与“的操作结果为原值 x1 x | 按位或 a b a|b 0 0 0 0 1 1 1 0 1 1 1 1 | 按位或只要有一个bit操作数为1其结果就为1 例子 int a 3| 5; 8bits: 0000 0011 (3) 0000 0101 (5) |------------ 0000 0111 (7) 练习; 写一个表达式 有一个整型变量a,要使a的第五位bit置1其他的bit保持不变 该如何操作 a xxXxxxxx | 00100000 (15) ----------- a: xx1xxxxx a a | (15); 结论 一个bit位与0进行”按位或“的操作结果为原值 x|0 x 一个bit位与1进行”按位或“的操作结果为1 x|1 1 ^ 按位异或: a b a^b 0 0 0 1 0 1 0 1 1 1 1 0 异或 求异不同为1相同为0 例子 int a 2 ^ 32; 8bits: 0000 0010 (2) 0010 0000 (32) ^ ---------- 0010 0010 (34) 思考; 有一个整型变量a要是a的第五位bit保留其他的全部取反 该如何操作 a: xxXxxxxx 11011111 ^ ------------ a a^(~(15)) 结论 一个bit位与0进行”按位异或“的操作结果为原值 x ^ 0 x 一个bit位与1进行”按位异或“的操作结果为原值取反 x ^ 1 ~x 练习 写一个程序交换两个整数的值不能使用临时变量 int a6; int b5; int temp; temp a; a b; b temp; printf(a); //5 printf(b); // 6 ---------------------------------- a a^b; b a^b; a a^b; 结论 位运算只与当前位没有进位没有有借位 按位左移 a n 把a按bit序列整体左移n位。 高位左移后会多出来n个bit位直接丢弃 低位空出来的n个bit位直接补0 如果左移后舍弃的高位都是0连续的0 那么左移n位就表示在原有的基础上乘以 2的n次方 例子 8bits: 1 4 1: 0000 0001 14: 0001 0000 (1*2^4) 32bits: 7 8 7: 00000000 00000000 00000000 00000111 78:00000000 00000000 00000111 00000000(7*2^8) 按位右移 x n 把x的bit序列整体往右移n个bits 低位右移后会多出n位直接舍弃 高位会空出n位补什么 对于有符号的数高位全部补 符号位 对于无符号的数高位直接补0 练习分析一下代码的输出结果 int a -1; -1 11111111 11111111 11111111 11111111 a a 31; a 31: 11111111 11111111 11111111 11111111 printf(%d\n,a);// -1 printf(%u\n,a);// 2^32 -1 unsigned int a -1; -1: 11111111 11111111 11111111 11111111 a a 31; a 31: 00000000 00000000 00000000 00000001 printf(%d\n,a);// 1 printf(%u\n,a);// 1 5赋值运算符 : 双目运算符结合性从右到左 a x; 先计算x的值然后再把x的值赋值给a 赋值运算符要求左边的操作数 必须为一个”可写的地址“左值 例子 5 5; //ERROR 2 3 5;//ERROR i 6//ERROR 赋值表达式由赋值运算符连接起来的式子。 赋值表达式的值 就是最后赋值给左边变量的那个值 a b 6; 先计算b 6表达式的值将其表达式的值赋值给a 复合赋值运算符 赋值运算符和算术运算符位运算符组成的复合的赋值运算符 如 - % * / | ^ 例子 a 5 a a5 a 5 6 a a(56) a n a an 6条件运算符 三目运算符 表达式1 表达式2 表达式3 执行 如果表达式1的值为真则整个表达式的值为表达式2的值 如果表达式1的值为假则整个表达式的值为表达式3的值 例子 int a,b,c,d,m,n; a 1; b 2; c 3; d 4; m 0; n 0; ab?(mab):(ncd); printf(%d\n,m);//0 printf(%d\n,n);//7 7逗号运算符 双目运算符优先级是最低结合性从左到右 表示式1 表达式2 执行 先求表达式1的值然后再求表达式2的值 整个逗号表达式的值 就是 表达式2的值 例子 int a5,b6; a (a 6,ab); a 12 8指针运算符 -取地址符 * -指向运算符 对象名 表示的含义是 取某某对象的地址 例子 int a; scanf(%d,a); 9sizeof求字节运算符 单目运算符求一个对象或类型的所占空间的字节数 10分量运算符 求结构体中的成员变量分量 - . 11下标运算符 [] 数组名 [下标]表示下标对应的哪一个数组元素 12强制类型转换运算符 类型
小练习 1.取整型变量x中的第p位开始的n个bit位 x: xxxxXXXXxxxx x p : xxxxxxxxXXXX 000000001111 (1n)-1 ------------ 00000000XXXX x(xp)((1n)-1) 2.将x中第p位开始的n个bit全部取反其余各个位保持不变 x: xxxxXXXXxxxx 000011110000 ((1n)-1) p ^------------ xxxx~(XXXX)xxxx x x^((1n)-1) p 3.将x中第p位开始的n个bit位设置为y中的最右边的n位的值 x其余各个位保持不变 x: xxxxXXXXxxxx 111100001111 ~(((1n)-1) p) ------------ xxxxooooxxxx y: yyyyyyyyYYYY 000000001111 (1n)-1 ------------ 00000000YYYY p xxxxooooxxxx |------------ xxxxYYYYxxxx (x~(((1n)-1) p)) | ((y(1n)-1) p) 4.下列表达式中正确的C赋值表达式是(C)
A,a7bca7 B,a7ba7
C,a(7b,b,a7) D,a7b,ca7
5,以下程序语句运行结果为D
int a;
printf(a%d\n,a);
A,编译出错 B,1024 C,NULL D,不确定值
6,int b0,x1;执行语句if(x)bx1;后xb的值依次为23
7,sizeof(double)的结果是(8)
8,设f是实型变量下列表达式中不是逗号表达式的是(D)
A, f3.2,1.0 B, f0,f10 C, f2.0,f0 D, f(3.2,1.0)
9,PC机中\n在内存占用的字节数是?(1)
10,设cw,a1,b2,d-5,则表达式x1c,y!c2,-a-5*bd1,ba2的值分别为
(1,0,1,编译错误)
11,判断变量a,b的值均不为0的逻辑表达式为
(a!0b!0)
12,数学式a/(b*c)的c语言表达式是
( double a/(b*c) )
13,以下程序运行后的输出结果是?(3)
#include
int main()
{
int a;
a(int)((double)(3/2)0.5(int)1.99*2);
printf(%d\n,a);
}
14,在c语言中如下程序输出的结果为
char c250;
unsigned char d;
char f;
dc249;
fc249;
printf(d%d\n,d); //243
printf(d%u\n,d); //243
printf(f%d\n,f); //-13
printf(f%u\n,f); //2的32次方-13 if短的是无符号的数高位就直接补0 if短的是有符号的数高位补符号位