C语言------操作符详解

本文中是笔者初学C语言的记录笔记。

文章目录

  • 算数操作符
  • 移位操作符
  • 位操作符
  • 赋值操作符
  • 单目操作符
  • 关系操作符
  • 逻辑操作符
  • 条件操作符
  • 逗号操作符
  • 下标引用,函数调用和结构成员操作符

前言

提示:这篇文章我们将学会

1,各种操作符的介绍

2,表达式求值



一、算数操作符

     +                    -                         *                            /                             %

+ - *都是很常见的

介绍一下  /  和   %

/:正常执行的是整数除法3/2=1   。如果想执行小数除法在  /  的两边的的数其中至少有一个应该是小数。

%:取模运算,就是前面那个数除以后面那个数的余数,  3 % 2 = 1.。注意%的两个操作数必须是整型,不能是浮点型。它运算的结果是有范围的。0到后面那个数减一。



二、移位操作符

<<左移操作符

>> 右移操作符  

注:移位操作符都是操作的补码。

注:移位操作符的操作数只能是整数

注:符号位就丢了

<<左移操作符::

计算规则:左边丢弃,右边补零(num丢了符号位)

 举例:5<<1 = 10;  5<<2 = 20;------5<<n = 5*2^n

-5 << 1  = -10; -5 << 2 = -20;-------5<<n  =  -5*2^n

 >> 右移操作符  

计算规则:(到底是逻辑右移还是算数右移是取决于编译器)

1. 逻辑移位 :左边用0填充,右边丢弃。

2. 算术移位: 左边用原该值的符号位填充,右边丢弃。

vs编译器采用的是的算数右移。

 警告:

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

例如

拓展:二进制

二进制有三种表述形式:源码,反码,补码。

正数的源码,反码,补码是相同的。

负数的源码,反码,补码是要计算的。

 

 整型的数在内存中存储的是补码二进制。

拓展:二进制的运算:

源码------(符号位不变其他位置按位取反得到)------>反码------(反码加一)---->补码

补码---- (补码减一)----------> 反码---------(符号位不变其他位按位取反)------>源码

注意:补码--------(符号位不变其他位按位取反)---------(加一)-------->   源码



三:位操作符

& --按位与(于&取地址的符号相同但是操作数不一样,一个是a&b,一个是&a)

| --按位或

^ --按位异或

注:这里的位是二进制位,比较的都是补码。

注:他们的操作数必须是整数。不能是浮点数。

& --按位与

对应的二进制位只要有0那与的结果就是  0  ,只有两个同时位1的时候才是  1  。

| --按位或

对应的二进制只要有  1  就是  1 ,只有两个都为 0 的时候才是  0   。

^ --按位异或

对应的二进制位 相同位0,相异位1

 异或的特殊操作:a^a=0;  0^a=a;  -------

练习

一,不能创建临时变量,实现两个数的交换

 法二:

 二,求一个整数存储在内存中的二进制中1的个数



 四:赋值操作符

“=”  它可以给一个变量重新赋上一个新的值。 也可以连续赋值

先赋值x再赋值a。

复合赋值

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



五:单目操作符

 “  !  ”:逻辑反操作,

可以把假变成真,把真变成假。

例如

在C语言中0表示假  非0表示真。

在c99之前没有表示真假的变量类型,在c99中引入了布尔类型。(使用时需要头文件<stdbool.h>)

 "&"取地址操作符

取出某某某在内存中的地址。不仅可以取变量的地址,也可以取数组的地址,只要他在内存中开辟了空间他就可以取地址。

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

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

sizeof不是函数,是操作符,求操作数 在内存中占的内存的大小。

 sizeof和数组

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

对一个数的二进制补码按位取反。



六:关系操作符

>

>=

<

<=

!=   用于测试“不相等”

==      用于测试“相等”

注意:两个字符串不能用“==”来比较,应该用strcmp库函数(<string.h>)是专门用来比较两个字符串的大小的,对应位置上字符的大小,不是比较长度。

例如:abc小于abd,比较的是ASCLL码值。从前向后挨个比较,遇到不同的就比较出来了比较ascll值。



七:逻辑与逻辑或

&&     逻辑与

||        逻辑或

&&逻辑与就是两个操作数都要满足条件才是真

||只要有一个满足就是真

练习



八:条件操作符

exp1 ? exp2 : exp3

表达式1为真,执行表达式2。

表达式1为假,执行表达式3。



九:逗号表达式

exp1, exp2, exp3, …expN

逗号表达式,就是用逗号隔开的多个表达式。

逗号表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果。

练习1

 

 练习2

 



十:下标引用,函数调用和结构成员

“  [  ]  ” :下标引用操作符,

两个操作数,一个是函数名,另一个是索引值。

 

“  ()  ”:函数调用操作符

 

   结构成员访问

 ”   .  “:结构体.成员名     //结构体访问操作符

   ”  ->  “: 结构体指针->成员名

打印结构体成员的值

 

 修改结构体成员的值

 

 

以上就是C语言中所有的操作符!!!!!

注意都要掌握!!!!!

   

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小峰同学&&&

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

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

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

打赏作者

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

抵扣说明:

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

余额充值