c语言操作符总结

xiaoxiao2022-06-12  42

操作符详解

算术操作符 + - * / % %操作符的两个操作数必须为整数, 除了% 操作符之外,其他几个可以用于整数和浮数。 对于/操作符如果两个操作数都是整数,执行整数除法。只要有浮点数就执行的是浮点数除法。 移位操作符 右移操作数 >> 移位规则:逻辑移位 ,左边用零填充,右边丢弃 算术移位,左边用原该值的符号位填充,右边丢弃 左移操作数 << 移位规则:左边抛弃,右边补零

# include <stdio.h> # include <stdlib.h> void main () { int a=13; int b=0; printf ("%d\n",b=a<<1); //26 01101——11010 printf ("%d\n",b=a>>1); // 6 01101——00110 printf ("%d\n",a); //13 system ("pause"); }

在移位操作符中,有代码可看出原有变量如果莫有操作时赋值给自己,则本身自己值不变。 位操作符 & 按位与 | 按位或 ^ 按位异或 注:操作数必须是整数 编程中可以用位操作符 1,一组数中都出现偶数次,莫个数时只出现奇数次,可全部异或找出此出现此奇数次数 2,一个整数的二进制中1的个数等

int main () > { > int num=-1; > int i=0; > int count=0; > for (i=0;i<=32;i++) // while (num) > { > if ((num>>i)&1)==1) //count ++; > count++; / /num=num&(num-1); > } > printf ("%d",count); > return 0; > }

赋值操作符

= 这个操作符很常用,基本只要写代码就会有,特别注意=和==的区别,在使用时应注意出现错误

**复合操作符 += *= /= %= <<== >>== &= |= ^=

int x=10; x=x+10; x+=10; //后两句作用相同,以上操作法用法一样

单目操作符 ! 逻辑反操作 ± 正负值 * 间接访问(解引用操作符) ++ - - 前置后置加加减减 ( ) 强制类型转换 ~ 对二进制按位取反 sizeof 操作数的类型长度 (字节为单位)

sizeof : short s=4; int a=3; printf ("%d",sizeof (s=a+10); //2 ————内部不参与运算 printf ("%d\n",s) //4 int main () { int a=-10; int *p=NULL; printf ("%d\n",!2); //0 printf ("%d\n",!0); //1 a=-a; p=&a; printf ("%d\n",sizeof(a)); //4 printf ("%d\n",sizeof(int)); //4 printf ("%d\n",sizeof a); //4 printf ("%d\n",sizeof int); //错误,计算类型要带括号 return 0; } # include <stdio.h> # include <stdlib.h> void test1 (int arr[]) { printf ("%d\n",sizeof (arr)); } void test2 (char ch[]) { printf ("%d\n",sizeof (ch)); } int main () { int arr[10]={0}; char ch[10]={0}; printf ("%d\n",sizeof (arr)); //40——数组的大小 4*10 (类型大小*数组元素个数) printf ("%d\n",sizeof (ch)); //10——数组的大小1*10 test1 (arr); //4 test2 (ch); //4——指针大小在32位平台都是4个字节,64位平台是8个字节 system ("pause"); return 0; }

编程中用到: int a=13; ……00000000000001101 把任意一位改为1/0,按位与/或取反操作,在使用<<或>>

#include <stdio.h> int set_bit(int a, int pos, int flag) { int b = 1 << (pos - 1); if (flag == 0) { a &= ~b; } else { a |= b; } return a; } int main() { int e=0; int g=0; int c=0; int ret=0; printf ("输入一个数,操作数,置1或0\n"); scanf ("%d%d%d",&e,&g,&c); ret=set_bit(e,g,c); printf("%d\n", ret); return 0; }

注意++ - -前置后置使用 int a=10; int b=0; b=- -a; //先- -后使用 b=++a; //先++后使用 b=a++; //先使用后++ b=a–; //先使用后- -

int i=1; int ret=(++i)+(++i)+(++i); 这样的代码在不同的编译环境中会出现不同的结果,因此再写代码中应慎用

关系操作符 >= <= > < != ==

操作符运算简单,但应该注意区分使用=和== 逻辑运算符 && ||

应注意区分使用逻辑与和按位与,逻辑或和按位或 1&2——0 1&&2——1 1|2——3 1||2——1

&&在使用时应注意,如果左边为假,后边操作就不执行了 ||在使用时应注意,如果左边为真,后边操作就不执行了

条件操作符 a1 ?a2 : a3 相当于if语句,如果a1为真就执行a2,否则就执行a3 逗号操作符 , , , , 从左向右执行,整个表达式结果是最后一个表达式的结果

int a=1; int b=2 int c=(a>b,a=b+10,a,b=a+1) //c=13 (0,12,1,13)

下表引用,函数调用和机构成员 [] 操作数:一个数组名+一个索引值 () 操作数: 接受一个或多个操作数,第一个操作数是函数名,剩余的操作数就是传递给函数的参数。——一个函数最少有一个操作数 . 结构体.成员名 -> 机构体指针->成员名 一般在结构体中会常用到 例如:

# include <stdio.h> # include <stdlib.h> struct s { int data[1000]; int num; }; struct s si={{1,2,3,4},20}; void print1 (struct s si) { printf ("%d\n",si.num); 结构体成员访问 } void print2 (struct s* ps) { printf ("%d\n",ps->num); //结构体成员访问 } int main () { print1 (si); print2 (&si); system ("pause"); return 0; }
转载请注明原文地址: https://www.6miu.com/read-4932307.html

最新回复(0)