您的位置:首页 > 编程语言 > C语言/C++

C语言 操作符知识点整理

2018-03-31 01:18 585 查看


一、算数操作符

 描述结合性优先级操作数
*乘法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个操作数} 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: