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

c语言操作符总结

2017-11-24 23:16 676 查看

操作符

分类:

算数操作符

移位操作符

位操作符

赋值操作符

单目操作符

关系操作符

逻辑操作符

条件操作符

逗号操作符

下标引用、函数调用和结构成员

#

算数操作符

+ 加、- 减、* 乘、/ 除、% 模运算或求余


除了%操作符之外,其他的几个操作符可以作用于整数和浮点数。

对于/操作符,如果两个操作符都是整数,执行整数除法。而只要有浮点数就执行浮点数除法。

%左右两边必须是两个整型操作数,返回值是余数而不是商。

#include<stdio.h>
int main()
{
float sum=1/3;
printf("%lf",sum);
return 0;
}


结果为3

移位操作符

<< 左移操作符 、 >> 右移操作符

1.左移位操作

移位规律:左边丢弃,右边补0

2.右移位操作

移位规律:

逻辑移位:左边补0,右边丢弃

算数移位:左边移入的位取决于符号位(符号位为1,用1填充;符号位 为0,用0填充)

标准说明:

无符号值执行所有移位操作默认就是逻辑移位;但对于有符号数,到底采用逻辑移位还是算术移位就取决于编译器。

左移一位有乘2的效果,右移一位有除2的效果(左移右移的效率要比乘除高)。

对于移位操作符,不要移动负数位,这个是标准未定义的。

//写一个函数返回参数二进制中1的个数

方法一
#include<stdio.h>
int count_one_bits(unsigned int value)
{
int count=0;
while(value)
{
if(value%2!=0)
count++;
value=value / 2;
}
return  count;
}
int main()
{
unsigned int value;
printf("请输入一个数:");
while ((scanf("%d", &value)) != EOF)
printf("%d\n",count_one_bits(value));
system("pause");
return 0;
}
方法二
#include<stdio.h>
int main()
{
int num=-1;
int i=0;
int count=0;
for(i=0;i<32;i++)
{
if((num>>i)&1)==1)
count++;
}
printf("%d",count);
return 0;
}


位操作符

&按位与 |按位或 ^按位异或

1.A&B :同零为零,同一为一,相异为零

2.A|B :同零为零,同一为一,相异为一

3.A^B :相同为零,相异为一

说明:他们的操作符必须为整数。

//交换两个数的值

#include<stdio.h>
int main()
{
int a = 10;
int b = 20;
a = a^b;
b = a^b;
a = a^b;
printf("a=%d,b=%d", a, b);
system("pause");
return 0;
}


赋值运算符

=


赋值是表达式,表达式就具有一个值;其值就是赋值表达式左值的新值。

结合性(求值顺序):从右到左。

赋值操作符可以连续使用:a=x=y+1;

符合赋值符

+=、-=、*=、/=、%=、<<=、>>=、&= 、^= 、|=

这些操作符都可以写成符合的效果。

如:

int n=n+1;

int i>>=1;

等效于

int n+=1;

int i=i>>1;

单目操作符 ##

! 逻辑取反操作,这个操作符产生一个整型结果0或1

~ 对整型类型操作数进行求补操作

++ 前置

– 后置

产生操作数的正值

产生操作数的负值

& 取地址

~ 对一个数的二进制按位取反

间接访问(解引用操作符)

(类型) 强制类型转换

sizeof 判断它操作数的类型长度(以字节为单位)

++:

后置++:先使用,后++
前置++:先++,后使用
后置--:先使用,后--
前置--:先--,后使用


&:

int arr[10]={0};

printf(“%p”,&arr);//数组的地址

printf(“%p”,&arr+1);//跳过整个数组的下一个地址

printf(“%p”,arr);//数组首地址

printf(“%p”,arr+1);//数组的第二个元素地址

sizeof:

int a=10;

printf(“%d”,sizeof(a));//4

printf(“%d”,sizeof a);//4

printf(“%d”,sizeof(int));//4

sizeof(数组名)——数组名表示整个数组——–计算整个数组的大小—单位是字节

sizeof(&a)//4//地址占四个字节

#include<stdio.h>
int main()
{
int a=10;
int  b=20;
printf("%d",sizeof(b=a+5));//sizeof中表达式不参与运算
printf("%d%d",a,b);
return  0;
}
//4 10  20


关系操作符 ##

>

=

<

<=

!=

==//要注意与赋值操作符区分

逻辑操作符

&& 逻辑与

|| 逻辑或

int i=0,a=0,b=2,c=3,d=4,j=0;

i=a++&&++b&&d++//只要与到0,就不再往下计算

j=a++||++b||d++//只要或到真,就不再往下计算

//&&:a=1,b=2,c=3,d=4

//||: a=1,b=3,c=3,d=4

条件操作符

exp1?exp2:exp3//若exp1为真,值为exp2,反之exp3


逗号表达式

逗号操作符用于将两个或着多个表达式分隔开,这些表达式至左向右逐个进行求值,整个逗号表达式的值是


最后那个表达式的值。

int a=1,b=2;

int c=(a>b,a=b+10,a,b=a+1)//c=13

下标引用、函数调用和结构成员

[]

操作数:一个数组名+一个索引值

双目操作符

()函数调用操作符

接受一个或者多个操作数:第一个操作数是函数名,剩余操作数是传递给函数的参数,

printf(”%p”,APP);//取出的是函数地址和&APP没有区别

访问结构成员操作符

. 结构体.成员名

-> 结构体指针->成员名
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: