c语言操作符总结

操作符详解

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

# 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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值