武林秘籍之C语言大法.第三式 操作符 带你走向武林之巅

本文详细介绍了C语言中的各种操作符,包括算术操作符(如%、/、*等)、移位操作符(左移、右移,区分逻辑移位和算术移位)、位操作符(AND、OR、XOR)、赋值操作符(如+=、-=等)以及单目操作符(如!、-、++、--)。还探讨了关系操作符(如>、<、==等)、逻辑操作符(&&、||)、条件操作符(?:)和逗号表达式。此外,文章提到了下标引用、函数调用和结构成员的使用。通过这些基础知识,帮助读者更好地理解和运用C语言。

算术操作符

在这里插入图片描述

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

在这里插入图片描述

移位操作符

在这里插入图片描述

移位操作只是简单的把一个值的二进制位向左或者向右移动
在左移位中,值最左边的几位被丢弃,右边多出来的空位直接补0
右移位则跟左移位不太一样,它有两种方案,一种是逻辑移位,一种是算数移位

在这里插入图片描述

  • 逻辑移位:移位后的空位用0来补齐
  • 算术移位:左边移入的位由原来的值得符号位决定,符号位是1就用1来补齐,符号位是0就用0来补齐
  • 算术左移和逻辑左移是相同的,只有在右移时,而且操作数是负数时才不一样

标准规定无符号执行的所有移位操作都是逻辑移位,对于有符号值,用逻辑移位还是算术移位取决于编译器

位操作符

在这里插入图片描述

  1. 两个位进行AND(&)操作时,如果两个位都是1,结果为1,否则为0
  2. 两个位进行OR(|)操作时,如果都是0,则为0,否则为1
  3. 两个位进行XOR(^)操作时,如果两个位不同,结果位1,如果两个位相同,结果为0

在这里插入图片描述

位操作符要求操作数为整数类型

赋值操作符

在这里插入图片描述
比如这种语句:
a = x = y + 3;
它就相当于:
x = y +3;
a = x;
但是我们不能认为a和x被赋予了相同的值
如果x是一个字符型变量,那么y+3就会被截去一段以便于容纳于字符类型的变量中,那么a所赋的值就是这个被截断后的值。

char ch;
…………
while( (ch = getchar() ) !=EOF ) ……

比如这个语句:EOF需要的位数比字符型值所提供的位数要多,getchar返回一个整型值而不是一个字符型值,把getchar的返回值首先存放在ch中将导致其截断,然后这个被截断的值发生整形提升才会于EOF进行比较,这个错误的代码在有符号字符集的机器上运行时,如果读取一个\377的字节,循环就会终止,因为这个值截断后在整形提升后的值于EOF的值相等。在无符号字符集的机器上运行的时候,这个循环将永远不会终止。

在这里插入图片描述

a += expression;
a = a + (expression);

这两个语句的作用是相同的,唯一不同的就是+=操作符的左操作数只求值一次.
注意括号:确保表达式expression在执行加法前已被完整求值

单目操作符

操作符作用
!逻辑反操作
-负值
+正值
&取地址
sizeof操作数的类型长度(以字节为单位)
~对一个数的二进制按位取反
(- -)前置、后置(- -)(这里的括号是方便看,无别的作用)
++前置、后置++
*间接访问操作符(解引用操作符)
(类型)强制类型转换

! 操作符对它的操作数执行逻辑反操作:如果操作数是真,其结果为假,如果为假,则结果为真。这个操作数实际上产生一个整型结果:0或1
~ 操作符对整形类型的操作数进行求补操作,操作数中原先为1的位变为0,为0的位变1
- 操作产生操作数的负值
& 操作符产生它的操作数的地址
*操作符是间接访问操作符,它与指针一起用,用于访问指针所指向的值
sizeof 操作符判断它的操作数类型长度,以字节位单位表示。sizeof(int) 返回整形变量在内存中所占的字节数
(类型)操作符被称为强制类型转换,用于显示地把表达式的值转换为其他类型

在这里插入图片描述

++与- -的使用方法是一样的

关系操作符

在这里插入图片描述

这些操作符产生的结果都是一个整型值,而不是布尔值。关系操作符的结果是整型值所以它可以赋值给整型变量
要注意==与=的使用,一般情况下这两个操作符交换在编译器下使用都不会报出警告,所以一定要注意它的使用

逻辑操作符

在这里插入图片描述

a>5 && a<10 如果两个子表达式都是真那么整个表达式则为真,
逻辑操作符会控制子表达式的求值顺序,比如&&先对左操作数进行求值,如果它的值为,那么右操作数会直接忽略不进行计算。如果为,才会继续计算。||也是如此,如果左操作数为真那么,整个表达式就必定会是真,所以右操作数直接不进行计算。如果左操作数为假,才会去计算右操作数。

条件操作符

在这里插入图片描述

条件操作符的优先级非常低,所以它的各个操作数不加括号,一般也不会有问题。
首先计算exp1,如果结果为真,那么就计算exp2,直接忽略exp3.如果结果为假,那么就计算exp3,直接忽略exp2.

逗号表达式

在这里插入图片描述

逗号操作符用于将两个或多个表达式分隔开。表达式从左开始依次向右逐个计算,整个逗号表达式的结果就是最后一个expN的值。

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

在这里插入图片描述

int arr[10]={0};//初始化
arr[9]=10;//将10赋值给下标为9的元素
arr[8]=9;//将9赋值给下标为8的元素

在这里插入图片描述

void test()
{
   printf("hello world!!!");
}
int main
{
  test();
  return 0;
}

在这里插入图片描述

struct stu
{           //定义一个成员变量
char name[20];
int age;
char id[20]; 
};
void print(struct stu *p)
{
   printf("%s %d %s",(p)->name,(p)->age,(p)->id);
   printf("%s %d %s",(*p).name,(*p).age,(*p).id);//两个是相同的
}
int main()
{
   struct stu s={"zhangsan",18,"2040222"};//初始化
   printf("%s %d %s",s.name,s.age,s.id);
}

这里只是简单的提一下后面会细细道来的

如果博客里面出现错误欢迎大家留言评论

从小白到武林之巅让我们一起学好c语言大法

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

侠客cheems

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值