C语言操作符

c语言操作符分为:算术操作符,移位操作符,位操作符,赋值操作符,单目操作符,关系操作符,逻辑操作符,条件操作符,逗号表达式,下标引用.  ,函数调用,结构成员

一.算术操作符   (+,-,*,  /, %)

/ 两边如果都是整数 ,想要得到一个小数的话,至少要有一个是小数;

%两边必须都是整数

1.除了%操作符以外,其他的几个操作符都可以作用于整数和浮点数;

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

3.%操作符的两个操作数必须是整数,返回的是整除之后的余数

二.移位操作符(>>,<<)

右移操作符(有/2的效果)

1.算术右移:左边补的是原来的符号位,右边丢弃。

2.逻辑右移·:右边丢弃,左边补0。

在c中通常都是算术右移。且移动的是存储在内存中的二进制补码。

左移操作符(有*2的效果):直接左边丢弃,右边补0.

在进行移位操作的时候,不要出现移动负数位的情况。

三.位操作符:&(按位与),|(按位或),^(按位异或)  

注意:他们的操作数都必须位整数。

&:按内存中存储的二进制位与   一个为0则为0;

|:按内存中存储的二进制位或  一个为1则为1;

^:按内存中存储的二进制位异或     相异为1,相同为0.

相关例题: 编写代码求一个整数存储在内存中二进制中1的个数。

#include<stdio.h>
int main(){
int num=0;
int count=0;
scanf("%d",&num);//num&1==1的话表示num最后一位为1,让num32位都依次移到最低位&1就可以得到二进制中
int i=0;
for(i=0;i<32;i++)
{if(1==((num>>i)&1))
count++;}
printf("%d\n"count);
return 0;}

四.赋值操作符 (=)

复合赋值(+= ,-= ,*= ,/= , %= , >>= , <<= , &= , |= ,^=)

五.单目操作符(只有一个操作数):! -(负值) +(正值) &  sizeof() ~(按二进制位取反) 

*(解引用操作符)  --   ++(前后置)  (类型) 强制类型转换。

sizeof()求大小时,对于变量可以省略括号,但是对于类型不行;sizeof()括号内部的表达式不参与运算。

#include<stdio.h>
int main(){
int a=11;
a=a|(1<<2);
printf("%d\n",a);//15
a=a&(~(1<<2));
printf("%d\n",a);//11
return 0;
}

六.关系操作符(>  <  >=  <=  !=  ==)

七.逻辑操作符(&&  ||   )关注本身的真假

#include<stdio.h>
int main(){
int i=0,a=0,b=2,c=3,d=4;
i=a++&&++b &&d++;//前面为0后面的就不算了
i=a++ ||++b ||d++;//前面为1后面的就不算了

八.条件运算符(三目运算符)exp1 ? exp2 :exp3(表达式1的结果为真,表达式2的结果就为整个表达式的结果,表达式1的结果为假,表达式3的结果就为整个表达式的结果。)

九.逗号表达式:从左到右依次执行,但整个表达式结果是最右边的。

十:下标引用[] ,函数调用()操作符。

十一:->操作符   ,.操作符。

结构体变量.成员名   结构体指针->成员名==(*ps).name

表达式求值是由操作符的优先级和结合性决定的

隐式类型转换:整型提升(只要出现有char short参与运算的就转换为整型参与运算);算术转换(如果某个操作数的类型在这些排名较低,那么首先就要转换为另一个操作数的类型后再执行运算long double>double>float>unsigned long int>long int >unsigned int>int)。

整型提升实例:

#include<stdio.h>
int main()
{
char a=3;
//00000000 00000000 00000000 00000011
//00000011 ---a截断
char b=127;
//00000000 00000000 00000000 01111111
//01111111  ---b截断
char c=a+b; //整型提升的时候是按照变量符号位进行提升的
//00000000 00000000 00000000 00000011
//00000000 00000000 00000000 01111111
//00000000 00000000 00000000 10000010
/10000010--c 截断
printf("%d\n",c);//-126//打印的时候也再一次整型提升
//11111111 11111111 11111111 10000010

#include<stdio.h>
int main(){
char a=0xb6;//10110110
short b=0xb600;
int c=0xb6000000;
if(a==0xb6)//整型提升补齐11111111 11111111 11111111 10110110
printf("a");
if(b==0xb600)//整型提升补齐
printf("b");
if(c==0xb6000000)
printf("c");
return 0;}
//代码运行结果为c,因为a和b都经历了整型提升
#include<stdio.h>
int main(){
char c=1;
printf("%u\n",sizeof(c));//1
printf("%u\n",sizeof(+c));//4
printf("%u\n",sizeof(!c));//1
return 0;}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值