一篇搞定C语言操作符(详解含示例) |
您所在的位置:网站首页 › c语言运算符规则 › 一篇搞定C语言操作符(详解含示例) |
目录 一.操作符是什么? 基本特征 语义 优先级 结合性 二.操作符的分类 三.操作符各类详解 1.算数操作符(+ - * / %) (1)优先级: (2)除法操作符(/)的计算规则及注意事项 (3)取余操作符(%)的计算规则 (4)算术操作符示例代码 2.移位操作符(>> . ) 四.操作符优先级表(含记忆规律) 1.运算符优先级和结合性一览表 2.表中规律: 一.操作符是什么?指令系统的每一条指令都有一个操作符,它表示该指令应进行什么性质的操作。不同的指令用操作符这个字段的不同编码来表示,每一种编码代表一种指令。 基本特征 语义每个操作符都有自己的语义,具体取决于它所操作的类型。 优先级每个操作符都有优先级。 结合性每个操作符都有结合性。 操作符的结合性定义了操作符对操作数执行操作的顺序,例如:右结合性表示该操作符对其操作数从右向左执行操作。 二.操作符的分类 操作符分类 算数操作符 + - * / %移位操作符 位操作符& | ^ 赋值操作符= += -= *= /= ……单目操作符! sizeof + - ~ & * ……关系操作符> = 三.操作符各类详解 1.算数操作符(+ - * / %) (1)优先级:(2)除法操作符(/)的计算规则及注意事项 这里重点要讲的是除法的计算 2.1除法计算分类 (1)整数除法 (除号两端都是整数) (2)浮点数除法 (两端有一个是小数就执行浮点数除法) 2.2计算规则及注意事项 注:除法中,被除数不能等于0 整数除法的结果只保留了整数部分,小数点后的直接舍去 如 15 / 5 =3 3 / 2 =1 注意:这里不是四舍五入,是将小数部分直接舍去哦! 浮点数除法的结果整数和小数部分都保留,结果精度一般是小数点后6位 例如 3 / 2.0 =1.500000 3.0 / 2 = 1.500000 3.0 / 2.0 = 1.500000 注意:两端至少有一个为小数即可 (3)取余操作符(%)的计算规则注:取余操作符的两端都必须为整数 3.1计算规则: 例如 5 % 2 = 1 (5除2等于2余数为1) 99 % 10 = 9 (4)算术操作符示例代码 int main() { printf("%d\n",3+5); printf("%d\n",4-2); printf("%d\n",5*7); printf("%d\n",15/5); printf("%d\n",3/2); printf("%d\n",99%10); return 0; }输出: 2.移位操作符(>> 1 其中b=7 ;而a 本身还是 15 2.2左移操作符 计算规则:左边丢弃,右边补0 (3)移位操作符示例代码 int main() { int a = 15; int b = -15; int c = 6; int m = -6; int d = a >> 1; int e = b >> 1; int f = c =1); return 0; } 输出: 5.单目操作符 (1)单目操作符的介绍 单目操作符:只有一个操作数 (2)单目操作符有哪些? 单目操作符 !逻辑反操作-负值+正值&取地址sizeof操作数的类型长度(以字节为单位)~对一个数的二进制按位取反--前置,后置--++前置,后++*间接访问操作符(解引用)(类型)强制类型转换注意:sizeof不是函数,是操作符 计算的是类型创建的大小(单位字节) (3)sizeof和数组 (4)sizeof与数组示例代码: int main() { int arr[10] = { 1,2,3,4,5,6,7,8,9,10 }; char ch[6] = { 'a','b','c','d','e','f' }; int a = sizeof(arr); //40 int b = sizeof(ch); //6 printf("int类型的大小%d\n",sizeof(int)); //4 printf("char类型的大小%d\n",sizeof(char)); //1 printf("数组arr的大小%d\n",a); //40 printf("数组ch的大小%d\n",b); //6 return 0; }输出: 6.关系操作符( =) (1)优先级 (2)关系操作符的介绍 (3)运算结果值 关系运算符的值只能是0或1。 关系运算符的值为真时,结果值都为1。 关系运算符的值为假时,结果值都为0。 (4)注意事项(1)前4种关系运算符的优先级别相同,后两种也相同。前四种高于后两种。 (2)关系运算符的优先级低于算术操作符。 (3)关系运算符的优先级高于赋值运算符。 (5)示例代码 int main() { printf("%d\n",(-3>2)); printf("%d\n",(3>=3)); printf("%d\n",(2)&&(-1)); printf("%d\n",(22) a的结果为1;a=1;2..当&&操作符左边的为假,右边的都不用计算了; (因为&&操作符有一个为假即为假) 例如 (33) 左边条件为假 ,右边就不用算了,整个式子的结果就是假; 3..当||操作符左边为真,右边也不用计算了; (因为||操作符其中一个为真即为真) 例如 (3>2)||(4 ! > / > + 所以左边的式子x+y=7(非0,为真),但是运算符!,结果变为假,所以结果为0; 0+z-1=0;左边为0,又因为是&&操作符,所以整个式子结果为假,即为0; 代码测试 int main() { int a = 0; int b = 0; int x = 3; int y = 4; int z = 1; printf("%d\n",(a=2)&&(b=-2)); printf("%d\n",!(x+y)+z-1&&y+z/2); return 0; }输出: 8.条件操作符( : ? ) (1)优先级 (2)运算规则:表达式为:表达式1:表达式2:表达式3 先计算表达式1的值,若表达式1为真,则执行表达式2;若表达式1为假,则执行表达式3; 例如; max = (x > y) ? x : y (就是把x,y中较大的赋给max) min = (x < y) ? x : y (就是把x,y中较小的赋给min) (3)代码示例 int main() { int x = 4; int y = 3; int a = 2; int b = 6; int max = ((x > y) ? x : y); int min = ((a < b) ? a : b); printf("x=%d y=%d a=%d b=%d\n",x,y,a,b); printf("max=%d\n",max); printf("min=%d\n",min); return 0; }输出: 9.逗号表达式( , ) (1)优先级 逗号表达式的优先级最低 (2)逗号表达式的介绍及运算规则逗号表达式,是c语言中的逗号运算符,优先级别最低,它将两个及其以上的式子联接起来,从左往右逐个计算表达式,整个表达式的值为最后一个表达式的值。 如:(3+5,6+8)称为逗号表达式,其求解过程先表达式1,后表达式2,整个表达式值是表达式2的值,如:(3+5,6+8)的值是14;a=(a=3*5,a*4)的值是60,其中(a=3*5,a*4)的值是60, a的值在逗号表达式里一直是15,最后被逗号表达式赋值为60,a的值最终为60。 例题:例题:(a = 3,b = 5,b+ = a,c = b* 5),求逗号表达式的值? 答案:40 解析:前两个表达式只是赋值,从第三个开始计算,b+=a,即b=b+a,即b=5+3,b=8,求最后一个表达式,c=b*5=8*5=40.因为逗号表达式的值是最后一个表达式的值,所以整个逗号表达式的值为40,其他各变量最后的值依次为:a=3,b=8,c=40 10.下标引用,函数调用和结构体成员 ( [ ] () . -> ) (1)优先级 (2)下标引用操作符( [ ])操作数:一个数组名+一个引索值 如: arr[10]={0};//创建数组 arr[9]=10;//使用下标引用操作符 [ ]的两个操作数是arr和9 (3)函数调用操作符( ( ) )1.操作数 函数名 + 函数参数 如 strlen("abc") 操作数为 strlen "abc" 注意:函数的参数可能有多个,所以对于函数调用操作符()来说,操作数至少有1个(函数可以没有参数,如:test()); 2.示例代码 #include void test() { printf("hello bit!"); } int main() { char ch[] = "abc"; int len = strlen(ch); printf("%d\n",len); test(); return 0; } (4)结构体成员访问操作符( -> . ). 结构体变量.成员名 -> 结构体指针->成员名 示例代码 struct book { char name[20]; char author[20]; float price; }; void Print(struct book * p) { printf("%s %s %.1f\n",p->author,p->name,p->price); } int main() { struct book a = { "小明","c语言",33.9f }; Print(&a); printf("%s %s %.1f",a.author,a.name,a.price); return 0; }输出:
四.操作符优先级表(含记忆规律) 1.运算符优先级和结合性一览表 2.表中规律: 结合方向只有三个是从右往左,其余都是从左往右。所有双目运算符中只有赋值运算符的结合方向是从右往左。另外两个从右往左结合的运算符也很好记,因为它们很特殊:一个是单目运算符,一个是三目运算符。C语言中有且只有一个三目运算符。逗号运算符的优先级最低,要记住。此外要记住,对于优先级:算术运算符 > 关系运算符 > 逻辑运算符 > 赋值运算符。逻辑运算符中“逻辑非 !”除外。 谢谢观看!!!
|
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |