【C语言】操作符详解(上篇)

简介: 【C语言】操作符详解(上篇)

1.算术操作符

🥳 加”+“ 减”-“ 乘”*“ 除”/“ 取模“%”

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

2、%操作符的两个操作数必须为整数,返回的是整除后的余数

3、对于/操作符,如果两个操作数都为整数,执行整数除法,而只要有一个浮点数则执行浮点数除法

ddad49f52a794d5daef5b45cbcc426fe.png

1380b84448234edcb433b5c480c58688.png

2.移位操作符

移动的是二进制位

普及一些知识🥰

👍10进制的数据中:都是0~9的数字组成的(我们生活中接触到的大多都是10进制表示的数,比如123、456、666)

👍2进制的数据中:都是0~1的数字组成的(比如数值10的2进制表示—1010)

👍8进制的数据中:都是0~7的数字组成的(比如数值10的8进制表示—12)

👍16进制的数据中:是由0-9和a-f组成的,并是由0~15来表示

2进制、8进制、10进制、16进制只不过是数值的表示形式而已 不要觉得神乎其神


2.1整数的二进制表示形式

整数是存放在整型变量中的,一个整型变量是4个字节–32比特位

整数的二进制表示形式有3种:原码、反码、补码

整数在内存中存储和运算的是:补码(2进制)

正整数的原码、反码、补码是相同的

负整数的原码、反码、补码要计算

🙌原码把一个数按照正负直接翻译成二进制就是原码

比如500000000000000000000000000000101

比如-510000000000000000000000000000101

最高的一位表示符号位,0表示正数,1表示负数

🙌反码原码的符号位不变,其他位按位取反就是反码

🙌补码反码+1

9e9ecd0d9683478ab33bda05d9626683.png


比如-5

原码-10000000000000000000000000000101

反码-11111111111111111111111111111010

补码-11111111111111111111111111111011


2.2.左移操作符 <<

5e8822ad084a45a8a1adfe39e6570338.png

a3e52f8423de4d76b86eeb5f7bce9942.png

14450ab7818c4a5489d47edb85ee93b9.png

cfe97ce51aa24496a45236516111311b.png这里a没有改变,因为没有给a赋值,如果想让a改变,可以写成:a=a<<1或者a<<=1

🥳移动规则:左边丢弃,右边补0


2.3.右移操作符 >>

🥳移动规则:

1、算术右移:左边用原该值的符号位填充,右边丢弃
2、逻辑右移:左边用0填充,右边丢弃

那右移的时候到底是采用算术右移呢还是逻辑右移呢?交给编译器来一试究竟,上代码⬇️

840d2baf08f5420b91a64df433cbd95c.png

1f926df28f06451187af4bbce5d2c0b9.png

👍由此可见,左边是用原该值的符号进行的填充,所以是采用了算术右移的方式

👍右移的时候采用哪种右移方式是取决于编译器的!

👍大部分编译器下都使用的是-算术右移


3.位操作符**

🥳这里的位:二进制位

🥳他们的操作数必须是整数

3.1. &

🥳对应的二进制位上如果有0则为0,也就是说两个对应的二进制位上全为1才为1

757b15db2bb54b9185140991e4f6539e.png

1426b125ea814a69b98c0510dd7bf352.png

3.2. |

🥳对应的二进制位上如果有1则为1,全0才为0

3d1f36be1c504779814eab11a5c4e054.png

96e80fe9785a4fb3809e0561c50f6532.png

3.3. ^

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

😁这里给大家上一道面试题:

🚨不能创建临时变量(第三个变量)实现两个数交换

我们大家肯定会想到创建一个临时变量tmp,然后进行a和b的交换,就像是交换一瓶醋和一瓶酱油一样,需要一个空瓶子,可是题中不允许创建第三个变量,那我们该怎么办呢?😕

我们可以这样:上代码⬇️

int main()
{
  int a = 3;
  int b = 5;
  printf("交换前:a=%d,b=%d\n", a, b);
  a = a ^ b;
  b = a ^ b;
  a = a ^ b;
  printf("交换后:a=%d,b=%d\n", a, b);
  return 0;
}

3eb2a79a91814f9d9cf7d61437adc91f.png

那这是什么原理呢?

db5ba32a00344f83adde07541b0f5310.png

0a4c441223b042208a1a2b3269415fdd.png

说明异或是支持交换律的


4.赋值操作符

赋值操作符是一个很棒的操作符,它可以让你得到一个你之前不满意的值,也就是你可以给自己重新赋值。

🙌复合赋值符: += -= *= /= %= >>= <<= &= |= ^=

➡️a=a+b可以写成a+=b; a=a>>1可以写成a>>=1; a=a&b可以写成a&=b…

🚨赋值和初始化要区别开:

初始化:创建变量并且直接赋给它一个值

赋值:对于已经创建好的变量进行修改


5.单目操作符

👉 !------> 逻辑反操作符
👉 - ------> 负值
👉 + ------>正值
👉 & ------>取地址

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

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

👉 - - ------> 前置、后置- -(减减)

👉 ++ ------> 前置、后置++(加加)

👉 * ------> 间接访问操作符(解引用操作符)

👉 (类型) ------> 强制类型转换


5.1.单目操作符的介绍

👍 ! :原来为真变为假,原来为假变为真

例如:上代码⬇️

f20ed3ebeb0e46128cc8b96e86d0bc00.png

🚨0为假,非0为真

👍 & :取地址操作符用来取…的地址

👍 * :解引用操作符和&取地址操作符是一对,一来一去

例如:上代码⬇️

2ff0033d6dff470da5658585e2470db1.png

👍 sizeof :所占内存空间的大小

例如:上代码⬇️

f3e52924c18e412ab70f4fc3e16bda4f.png

也可以计算数组的元素个数⬇️

6d11896648224b8c86b23571c4f8a60c.png

👍 ~ :对二进制位(补码)按位取反

🚨注意 :原码和反码之间转换符号位不变,但是按位取反符号位是需要改变的

例如:上代码⬇️

d3ff2ae6b6b94a23be0f48583237a46d.png

f2e6781719c44724977f4b4493a92d3c.png

👍 ++ - -:前置:先++/- -,后使用; 后置:先使用,后++/- -

例如:上代码⬇️

f4e53f78351d4c0b9d9a75e28ec47384.png

bca0a80508f84a02a0625848ccad2c46.png

398c8da596be47afb44150fda828ef5b.png

6756e8c06808465480c726fbf75d051d.png

5369f51bbe3841f4b148619e4fe1e9b7.png

👍 (类型) :强制类型转换

例如:上代码⬇️

6b351daaee9e40598b518c0d845cb415.png

🚨强制转换总归是不合适的,俗话说强扭的瓜不甜,非必要不用


5.2.sizeof和数组

🥳数组传参的时候实际上传的是数组首元素地址,所以接收的时候本质上是指针来接收, 即使是char 的地址,因为是指针变量,所以在x86环境下为4个字节(x64下为8字节),不要看不起人家,误以为看到是char就是1个字节*

2c3d38ea05d9456abe15f4843918e5e4.png

总结🥰

以上就是操作符详解的上篇内容啦🥳🥳🥳🥳
欲知后事如何,请听下篇分解喽💕💕💕
创作写文不易,还多情各位大佬uu们多多支持哦🥰🥰🥰

93ab8a78d86a446d8dcb876da468e530.gif

目录
相关文章
|
4天前
|
C语言
C语言逻辑操作符的短路问题
C语言逻辑操作符的短路问题
|
4天前
|
编译器 C语言
【C语言】:中移位操作符,位操作符详运算规则详解
【C语言】:中移位操作符,位操作符详运算规则详解
7 1
|
7天前
|
存储 编译器 C语言
C语言---操作符详解(1)
C语言---操作符详解
|
14天前
|
存储 C语言 索引
【C语言基础】:操作符详解(二)
【C语言基础】:操作符详解(二)
|
23天前
|
编译器 C语言
C语言学习记录——操作符详解知识点选记(算术操作符、单目操作符、移位操作符、关系操作符、逻辑操作符、条件操作符......)二
C语言学习记录——操作符详解知识点选记(算术操作符、单目操作符、移位操作符、关系操作符、逻辑操作符、条件操作符......)二
25 3
|
23天前
|
存储 C语言
C语言:详解操作符(下)
C语言:详解操作符(下)
20 3
|
23天前
|
C语言
C语言学习记录——操作符习题、算数转换习题,多解法&优解法&单选题
C语言学习记录——操作符习题、算数转换习题,多解法&优解法&单选题
13 1
|
23天前
|
存储 编译器 C语言
C语言学习记录——操作符详解知识点选记(算术操作符、单目操作符、移位操作符、关系操作符、逻辑操作符、条件操作符......)一
C语言学习记录——操作符详解知识点选记(算术操作符、单目操作符、移位操作符、关系操作符、逻辑操作符、条件操作符......)一
20 1
|
4天前
|
算法 C语言
【C语言】:巧用移位操作符,位操作符解决问题
【C语言】:巧用移位操作符,位操作符解决问题
7 0
|
4天前
|
编译器 C语言
【C语言】:sizeof操作符的使用和各种常见数据类型的大小
【C语言】:sizeof操作符的使用和各种常见数据类型的大小
7 0