前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言操作符

C语言操作符

作者头像
海盗船长
发布2020-08-27 17:17:33
1.1K0
发布2020-08-27 17:17:33
举报
文章被收录于专栏:基础知识文章

C语言操作符

算术运算符

代码语言:javascript
复制
C提供了常有的算术运算符:
+、    —、    *、    /、   %、

除了%操作符,其余操作符既适用于浮点类型,又适用于整数类型。当/操作符的两个操作数都是整数时执行整除运算,其他情况执行浮点数除法。 % 为取模操作符,其两个操作数必须为整数,而返回的值是整除之后的余数。

移位操作符

  • 左移位操作符<<
  • 右移位操作符>> 移位操作是把一个值的二进制位向左或向右移动。 左移一位,相当于数值乘2;右移一位,相当于除以2。 在 左 移位中,值最左边的几位被丢弃,右边多出来的几个空位由 0 补齐。 在 右 移位中,有两种方案:(二者只有在操作符是负值时才不一样) 逻辑移位:左边移入的位用0填充; 算数移位:左边移入的位由原先该值的符号位决定,符号位为1 则移入的位均为1,符号为0,移入的位均为0。 左操作数的值将移动由右操作数指定的位数,两个操作数都必须是整型类型。

位操作符

位操作符有:

  • & :按位与 如果两个位都为1,结果为1;否则结果为0
  • | :按位或 如果两个位都是0,结果为0;否则结果为1
  • ^ :按位异或 如果两个位不同,则结果为1;如果两个位相同,结果为0

简单赋值式

  • = :赋值表达式;赋值表达式的值就是左操作数的新值。赋值表达式的结合性是从右到左。

复合赋值式

+= 、-=、-+、*=、/=、 %=、 <<=、 >>=、 &=、 ^=、 |= (类型) 举例: a+=5 <=> a=a+5

单目操作符

  • C语言中只接受一个操作数的操作符 :
  • ! 逻辑反操作 操作数为真,结果为假;操作数为假,结果为真。实际上产生一个整型结果,0或1.
  • ~ 求补操作 对整型操作数进行操作 原先为1的位变为0,原先为1的位变为0
  • (–) 产生操作数的负值
  • & 产生操作数的地址
  • *间接访问操作符,与指针一起使用,用于访问指针所指向的值
  • sizeof 判断操作数的类型长度,以字节为单位表示,操作数既可以是个表达式,也可以是(类型名)
  • (类型) 强制类型转换,用于把表达式的值转换为另外的类型
  • ++ – 这两个操作符都有两个变型,前缀形式(++i)和后缀形式 (i++)
  • 前缀形式:操作数的值被增加或减小,但表达式的值就是操作数增加(减小)后的值

关系操作符

= < <= != 测试不相等 == 测试相等 如果两端的操作数符合操作符指定的关系,表达式结果是1,如果不符合,结果是0 关系操作符的结果是整型值,所以它可以赋值给整型变量 注意,在以后编写程序时一定注意区分 赋值= 和 相等==

逻辑运算符

&& 逻辑与 (1)&&( 2 ) 如果表达式1是真的,再对表达式2求值; 如果表达式1是假的,对表达式2没必要再求值,整个式子则为假

|| 逻辑或 (1)&&( 2 ) 如果表达式1是真的,不再对表达式2求值; 对表达式1求值,若为真,则不必要求后面的,整个式子结果已经确定

条件操作符

条件操作符接受三个操作数,并且会控制子表达式的求值顺序。 exp1 ? exp2 : exp3 首先算exp1,若它的值为非0值,即为真,那么整个表达式的值为exp2,对exp3不会求值; 但是如果exp1的值为假,那么不对exp2 求值,整个表达式的值为exp3。

逗号操作符

exp1,exp2,exp3,、、、expN

这些表达式自左向右逐个进行求值,整个逗号表达式的值就是最后一个表达式的值。

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

//下标引用[] int main() { int arr[10] = { 0 }; arr[4] = 8;//(arr+4)——(4+arr)——4[arr];[]的两个操作数是arr和4 4[arr] = 6; return 0; }

//函数调用操作符 接受一个或者多个操作数 第一个操作数是函数名 其余的操作数是传给函数的参数

代码语言:javascript
复制
{
return x + y;
}
int main()
{
int a = 10;
int b = 5;
Add(a, b);//Add是函数的地址,&Add也是函数的地址,表示同一个意思,()是函数调用操作符,第一个操作数是Add,还有 a,b
}

//结构体
``#include<string.h>
enum SEX
{
male,
female,
secert,
};//此时还没有开辟空间,只是个类型
struct STU
{
char name[20];
int age;
enum SEX sex;
};
int main()
{
struct STU s1;//现在才开辟空间
struct STU * ps = &s1;
(*ps).age = 20;
ps->age = 20;//ps指向对象的成员
strcpy(ps->name, "张三");
ps->sex = male;//结构体对象 用.  结构体指针 ->
s1.age = 20;
s1.sex = male;
strcpy(s1.name, "张三");//对于字符串的赋值必须用strcmp
printf("%s\n%d\n%d\n", s1.name, s1.age, s1.sex);//张三 20 0
system("pause");
return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/04/10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • C语言操作符
    • 算术运算符
      • 移位操作符
        • 位操作符
          • 简单赋值式
            • 复合赋值式
              • 单目操作符
                • 关系操作符
                  • 逻辑运算符
                    • 条件操作符
                      • 逗号操作符
                        • 下标引用、函数调用和结构成员
                        领券
                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档