C语言 操作符知识点整理
2018-03-31 01:18
585 查看
//i = (a++)||(++b)||(d++);
// a = 1,b=3,c=3,d=4
printf("a = %d\n b = %d\n c = %d\nd = %d\n", a, b, c, d);
// a = 1,b=2,c=3,d=4 return 0;}
一、算数操作符
描述 | 结合性 | 优先级 | 操作数 | |
* | 乘法 | L-R | 高 低 | 整数、浮点数 |
/ | 除法 | L-R | 操作数中只要有浮点数就执行浮点数除法、没有浮点数执行整数除法 | |
% | 整除取余 | L-R | 整数、浮点数 | |
+ | 加法 | L-R | 整数、浮点数 | |
— | 减法 | L-R | 整数、浮点数 |
二、移位操作符
1、<< 左移操作符乘2^n效果,适用于左移后被舍弃的高位不含1的情况,否则会溢出eg:int num = 10; num<<1; num = 20;10的原码: 00000000000000000000000000001010 //10num左移一位:00000000000000000000000000010110 //20计算机语言用补码运算,正数补码、原码、反码一致 2、>> 右移操作符(1)逻辑右移左边用0填充,右边丢弃(2)算数右移左边用原该值的符号位填充,右边丢弃eg: int num=-1; num >> 1;num=-1;-1的补码:11111111111111111111111111111111 逻辑右移:01111111111111111111111111111111 //-1算数右移:11111111111111111111111111111111 //-1 注:逻辑移位主要用于有符号数,无符号数采用逻辑移位还是算术移位取决于编译器;移位运算不移动负数位eg:int num = 10;num >> -1; //error三、位操作符
& 按位与| 按位或^ 按位异或*拓展:1.判断把一个整数存储在内存中的二进制第n位为1还是0 (num >> n)&1 结果为0,第n位为0 结果为1,第n位为12.求一个整数存储在内存中的二进制中1的个数#include<stdio.h>int main ( ){int num = -1;int i = 0;int count = 0; //计数 while(num){ count++; num = num & (num - 1); }printf( “二进制中1的个数 = %d\n” , count ) ;return 0;}3.把一个整数存储在内存中的二进制第n位置1 k = num << n; num = |k;4.一个数组中,只有一个数不是成对出现的,找出这个数 将所有数异或,最终结果为不是成对出现的那个数5.不能创建临时变量,实现两个数的交换 #include<stdio.h>#include<stdlib.h>int main(){ int a = 1;int b = 2; printf("a=%d b=%d\n", a, b); a = a^b; b = b^a; a = a^b; printf("a=%d b=%d\n", a, b); system("pause"); return 0;}四、赋值操作符
= += -= /= %= >>= <<= &= |= ^=eg: int x = 10 ; 等效于 x + = 10 ; //复合赋值 x = x + 10;五、单目操作符
! 逻辑反操作- 负值+ 正值(区别于加号)& 取地址sizeof 操作数的类型⻓度(以字节为单位)~ 对⼀个数的⼆进制按位取反 eg:printf(“%d\n”,~0); //-1-- 前置、后置--++ 前置、后置++* 间接访问操作符(解引用操作符)int num = 10; int *p = # *p=20;// 间接访问操作符(类型) 强制类型转换float f = (float) 3.14;int num =(int) f; sizeof: 1. sizeof内部表达式不执行 eg:int a = 10; short int s = 5; printf("%d\n", sizeof(s=a+4));//2 printf("%d\n", a);//10 printf("%d\n", s);//52.sizeof书写格式 sizeof (a) √ sizeof (int) √ //求int所创建变量的大小 sizeof a √ sizeof int × //类型需加()3.sizeof (数组名)数组名表示整个数组,sizeof (数组名)求取整个数组的大小,单位是字节4.&(数组名) 数组名表示整个数组的地址,&(数组名)求取整个数组的地址 printf(“%d\n”,&arr) //数组的地址 printf(“%d\n”,&arr+1) //跳过了整个数组5.除3、4外,所有遇到的数组名均为首元素地址6.特殊:在函数中sizeof(数组名)相当于指针,代表首元素地址,地址的字节永远为4 eg: #include<stdio.h>void test1(char arr[]){ printf("%d\n", sizeof(arr)); //4}void test2(char ch[]){ printf("%d\n", sizeof(ch)); //4}int main(){ int arr[10] = {0}; char ch[10] = {0}; printf("%d\n", sizeof(arr)); //40 printf("%d\n", sizeof(ch)); //10 test1(arr); test2(ch); return 0;}前置++和--eg: int a = 10;int x = ++a;//先自增,后使用,x=11,a=11 int y = --a;//a自减,后使用,y=9,x=9后置++和--eg: int a = 10;int x = a++;//先使用,后增加,x=10,a=11 int y = a--;//a自减,后使用,y=10,x=9int ret = (++i) + (++i) + (++i); printf(“%d\n”,ret) //问题表达式,不同编译器运算顺序不同printf(“%d\n”,i) 苹果系统:2+3+4;vc6.0:4+4+4 ; vs 2008: 3+3+4六、关系操作符
> >= < <= != ==X = get_value () ;if(x==5) //这种写法容易错写成x=5,最好写成5==x格式//表达式;七、逻辑操作符
&& 与|| 或*注:逻辑与左边为0,右边不计算 逻辑或左边为1,右边不计算eg:#include <stdio.h>int main(){ int i = 0,a=0,b=2,c =3,d=4; i = (a++)&&(++b)&&(d++);//i = (a++)||(++b)||(d++);
// a = 1,b=3,c=3,d=4
printf("a = %d\n b = %d\n c = %d\nd = %d\n", a, b, c, d);
// a = 1,b=2,c=3,d=4 return 0;}
八、条件操作符
exp1 ? exp2 : exp3 三目操作符eg:使用条件表达式实现找两个数中的较大值 max = a > b ? a : b九、操作符的属性
复杂表达式的求值有三个影响的因素。1. 操作符的优先级2. 操作符的结合性3. 是否控制求值顺序。两个相邻的操作符先执⾏哪个?取决于他们的优先级。如果两者的优先级相同,取决于他们的结合性。十、逗号表达式
逗号表达式,就是⽤逗号隔开的多个表达式。逗号表达式,从左向右依次执⾏。整个表达式的结果是最后⼀个表达式的结果。eg:while循环:a = get_val();count_val(a);while (a > 0){ //业务处理 a = get_val(); count_val(a);}使⽤逗号表达式进行简化,改写:while (a = get_val(), count_val(a), a>0){ //业务处理}十一、下标引用、函数调用
1、[ ] 操作数:一个数组名+一个索引值 eg:a[3]=6; a 为数组名,3为索引值 2、函数调用:int Add ( int x, int y , int z ){ return x+y;}Int main ( ){Add (1,2) //使用( )作为函数调用操作符,Add为函数地址,该语句共3个操作数}相关文章推荐
- c语言知识点问答整理
- [c语言基础回顾]操作符和表达式中一些极其容易混淆的知识点
- C语言操作符整理简介
- C语言知识点整理
- 【学习ios之路:C语言】总结整理:学好Object-C---C语言必备知识点
- C语言操作符整理
- 整理一下C语言里的操作符
- C语言编译过程(整理)
- C#知识点(为自己整理)
- 简练软考知识点整理-项目人力资源管理简介
- matplotlib 绘图可视化知识点整理
- [整理]C语言中字符常量与ASCII码
- C语言复习知识点汇总4--计算机二级(C语言)
- C语言的学习整理
- c语言:sizeof的使用,其不是函数,是一个操作符关键字,定义一个数组arr,输出arr和&arr的区别
- C语言超大数据相加计算整理
- 决策树知识点整理
- C语言最重要的知识点1
- c语言常用小知识点(const、sizeof)
- 多线程知识点整理