湖州住房和城乡建设厅网站,做企业网站到哪里找,宿迁做网站的公司,学校教务网站的设计与实现这篇文章主要详细介绍了C语言的操作符#xff0c;文中通过示例代码介绍的非常详细#xff0c;对大家的学习或者工作具有一定的参考学习价值#xff0c;需要的朋友们下面随着小编来一起学习学习吧 一、基础
1.1 算数操作符 - * / % - * / 这些操作符是我们… 这篇文章主要详细介绍了C语言的操作符文中通过示例代码介绍的非常详细对大家的学习或者工作具有一定的参考学习价值需要的朋友们下面随着小编来一起学习学习吧 一、基础
1.1 算数操作符 - * / % - * / 这些操作符是我们编程时候最常用的几个算数操作符 - * 等算数操作符就不用再多说了与正常的数学用法相同,下面是一些常用但是初学者可能不太容易把握、易错的算数操作符 1.1.1 / 操作符 /:除法,除法在C语言中分为整数除法和浮点数除法 整数除法/d的两个操作数都为整数计算方法是向下取整 得到结果为2 浮点数除法储存值的变量必须是浮点数 两个操作数中至少有一个为浮点数但除数或者被数不一定要用浮点数存储只需要在计算时进行转化即可 %.nlf也可以使结果自动四舍五入保留n位小数 1.1.2 %取余操作符 取余运算符得到的是余数但取余操作符的两个操作数都要为整数 c的值就等于8除以3的余数 2 1.1.3 - * /操作符 直接举例子 a2就等同于aa2将a的值加2再赋值给a a-2就等同于aa-2将a的值减2再赋值给a *、/也是相同的道理 1.2 单目操作符 单目操作符顾名思义单目就是操作数只有一个的操作符 1.2.1 ! 操作符 ! 逻辑反操作将真变为假将假变为真 在逻辑定义中0表示假非0则表示真 在这段代码中先给i赋初值0然后在while判断是否进入循环时!0就是真进入循环但为了防止死循环我们加上一个限制条件保证只打印5次 同样如果while判断条件只有一个0时则说明为假不进入循环打印0次 1.2.2 sizeof 操作符 sizeof类型名sizeof返回无符号的所计算的对象或者类型所占空间的大小单位是字节 sizeof经常也用来计算数组元素的个数 1.2.3 ~操作符 ~按位取反操作符对二进制位进行按位取反将二进制补码每一位的0变11变0。注意是对补码进行操作负数要先将原码变为补码同时取反得到的也是补码看结果还得再变为原码 从图中可以看出0在按位取反后应该是 -1同样在编译器上验证 1.2.4 、--操作符 前置前置--先将变量1或者-1再作为表达式的值使用先再使用 后置后置--先将变量的值作为表达式使用再将变量1或者-1先使用再 用上面的口诀想起来就容易多了 1.2.5 取地址操作符 取出某个变量、数组、函数等的地址在比价复杂的代码中我们经常用指针进行操作操作符就可以取出地址赋值给指针变量 1.2.6 * 间接访问操作符 间接访问操作符也称解引用操作符操作数是地址或指针可以通过对地址的解引用找到地址中存储的变量对变量进行间接操作 1.2.7 强制类型转化 将一种数据类型的变量强制转化为另一种数据类型 如参数需要一个无符号的整形变量而你目前所有的是一个整形变量啊就可以通过强制类型转化转化为组符号的整形这个经常用于函数参数的优化部分 如unsigned inta 即可将a转化为无符号的整形同样强制类型转化尽量要遵守由低到高转化否则也会丢失精度 1.3 逻辑操作符 逻辑与 操作符“同时都要满足” || 逻辑或 操作符“满足其中一个即可” 12----1 01-----0 1||2 ----1 0||1-----1 1表示真0表示假 例找出1000---2000之间的闰年 闰年如果year能够被4整除并且不能被100整除则year是闰年。或者如果year能够被400整除则year是闰年判断闰年就恰好用到了这两个操作符 int year 0;for (year 1000; year 2000; year){if ((year % 4 0 year % 100 ! 0) || year % 400 0)//判断闰年printf(%d , year);} 逻辑操作符这里有一个超级易错点 对于来说如果表达式左边为0则说明在逻辑上已经为假了那么右边全部的表达就不再进行计算也不执行。 int i 0,a0,b2,c 3,d4;i a b d;printf(a %d\n b %d\n c %d\nd %d\n, a, b, c, d); a;----是先将a的值使用在对a加1。刚使用的表达式a的值为0并且在的左边所以后面b,d不再计算。 同样对于||来说如果表达式左边为非0则说明在逻辑上已经为真了那么右边全部的表达就不再进行计算也不执行。 int i 0, a 0, b 2, c 3, d 4;i a||b||d;printf(a %d\n b %d\n c %d\nd %d\n, a, b, c, d); a这个表达式的值为0继续执行但是b的值为3在||操作符的左边并且在逻辑上已经为真了所以后面的d不再计算 1.4 条件操作符 条件操作符是C语言中唯一一个三目操作符 表达式1如果为真即计算表达式2同时表达式2的结果就是三目操作符的运算结果 表达式2如果为假即计算表达式3同时表达式3的结果就是三木操作符的运算结果 也可以在编译器里面运行来验证 int a 0, b 3, max1 0,max2;if (b a)max1 b;elsemax1 a;//等同于max2 (b a) ? b : a;printf(%d %d, max1, max2); 运算结果当然是max13 max23 1.5 逗号表达式 逗号表达式就是用逗号隔开的多个表达式。里面的表达式从左向右依次执行整个表达式的结果是最后一个表达式的结果。 int a 1;
int b 2;
int c (ab, ab10, a, ba1) 从左向右一次算ab1012 ; ba113然后将这个逗号表达式整体的值(即ba1)赋给变量c 即 c13; 需要注意的是逗号表达式的每一个表达式都必须从左向右依次计算 1.6 下标引用函数调用和结构体成员访问
1.6.1 下标引用操作符[]
arr[2]2;//将2赋值给arr[2] [ ]就是下标引用操作符arr和2是[ ]的两个操作数arr为数组名2为索引值 1.6.2 函数调用操作符 可以接受一个或者多个操作数第一个操作数是函数名剩余的操作数就是传递给函数的参数函数传参可以传多个参数 1.6.3 结构体访问操作符.- 用法 结构体变量.结构体成员 结构体指针变量-结构体成员 #include stdio.h
struct Stu
{char name[10];int age;char sex[5];double score;
}
void set_age1(struct Stu stu)
{stu.age 18;//结构体变量访问结构体成员
}
void set_age2(struct Stu* pStu)
{pStu-age 18;//结构体指针变量访问结构体成员
}
int main()
{struct Stu stu;struct Stu* pStu stu; stu.age 20;//结构成员访问set_age1(stu);pStu-age 20;//结构成员访问set_age2(pStu);return 0;
}
1.7 关系操作符 用于测试“相等” ! 用于测试“不相等” 二、进阶
2.1 二进制
2.1.1 二进制的计算 2.1.2 二进制的存储 2.2 移位操作符 移位操作符移动的是二进制的补码且操作数只能为整数 左移操作符将二进制位整体向左移动左边丢弃右边补零 图为将-15左移1位 右移操作符将二进制位整体向右移动右边丢弃左边补符号位 图为将-15右移一位 负数学会了整数就更简单了因为整数的原码反码补码都一样不用互相转化 2.3 位操作符 位操作符的操作数必须为整数 按位与: ab 对应的二进制补码 有0则为0同时为1才为1 | 按位或: a|b 对应的二进制补码 有1则为1同时为0才为0 ^ 按位异或: a^b 对应的二进制补码 相同为0不同为1 实例1不创建第三个变量实现两个整数的交换 方法1 int a 2;int b 3;printf(交换前:a %d, b %d\n, a, b);a a b;b a - b;a a - b;printf(交换后:a %d, b %d, a, b); 这种方法在一般情况下可以但是当a,b非常大时ab可能会超过存储范围长度大于整形 方法2用按位异或计算 int main()
{int a 2;int b 3;printf(交换前:a %d, b %d\n, a, b);a a ^ b;b a ^ b;a a ^ b;printf(交换后:a %d, b %d, a, b);return 0;
} 在解释原因前先演示一下按位异或的几个规则 a^a0 详细看图 a^0a 详细看图 a^b^aa^a^b即按位异或运算满足交换律 详细看图 解释一下原因aa^b,然后 b (a^b) ^b a^0a即实现了将a的值赋给了b 同样aa^b然后aa^b^aa^a^b0^bb,即实现了将b的值赋给了a 实例2求一个整数存储在内存中的二进制中1的个数 一个数1可以得到它的最低位详细参考按位与操作符图解如果a11说明a的最低位是1如果a10,说明a的最低位是0那么思路就清晰了只需要将a的二进制位多次右移每次右移后1得到它的最低位判断是否为1为1的话计数器就将32个二进制位尽皆遍历即可知道共有多少个1 int main()
{int a 31;//5个1int i 0;int count 0;for (i 0; i 32; i){if (a 1 1) //说明a的最低位是1count;a 1;}printf(%d, count);
}
三、同一操作符的不同类型操作数之间的转化 例如将整形3存到浮点型变量中没问题。但是将一个浮点型的数字存到一个整形变量中去就可能会出现精度丢失问题。这些转化需要我们在写代码的时候自行完成 四、操作符的优先级 C语言操作符的优先级 在使用这张表时需仔细核对运算符的符号和名称但在大多数情况下我们选择直接将需要优先计算的用圆括号括起来不过最基本的顺序还是得知道的总不能一份代码到处都是圆括号吧。