学了那么长时间的编程,C语言的各种操作符都搞不懂?点开这里有详细的介绍—>

目录

前言

一、原码、反码、补码的基础概念

1.原码

2.反码

3.补码

二、原码、反码、补码的计算方法

1.原码

2.反码

3.补码

三、算术操作符

四、移位操作符

1. 左移操作符

移位规则:

2. 右移操作符

移位规则:

(1) 逻辑移位

(2) 算术移位

五、位操作符

1. 按位与运算(AND)

2. 按位或运算(OR)

3. 按位异或运算(XOR)

4. 取反运算(NOT) 

5. 位运算的应用

(1)判断整数奇偶 

(2)二进制数选取指定位 

(3)将指定位设置为 1 

(4)反转指定位 

(5)交换两个数 —— 不借助第三变量

(6)将二进制最右侧为 1 的二进位改为 0 

(7)计算二进制中二进位为 1 的个数 

(8)判断某数是否为 2 的幂次方 

六、赋值操作符

七、单目操作符

八、关系操作符

九、逻辑操作符

1.区分逻辑与和按位与

2.区分逻辑或和按位或

十、条件操作符(三目操作符)

 使用条件表达式得到两个数的较大值

十一、逗号表达式

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

1. [ ] 下标引用操作符

 2. ( ) 函数调用操作符

3. 访问一个结构的成员

十三、操作符的属性

1. 复杂表达式的求值有三个影响的因素

操作符优先级

表格说明


前言🚩

        学了这么长时间的C语言,我也刷了不少的题目,其中每到遇见关于操作题这样的概念类型的选择题我都要标记一下,或者直接瞎选一个。现在趁着刚刚考试完期末周的劲头还没有过去,硕硕就赶紧复习加上查找资料创作出来了一篇关于C语言操作符的博客。各位看官坐稳扶好了,我们要发车了🥰🥰

一、原码、反码、补码的基础概念

        在要学习下面的位操作符之前,让我们先了解原码、反码和补码的概念。对于一个数计算机要使用一定的编码方式进行存储,原码、反码、补码是机器存储一个具体数字的编码方式。

1.原码

        🍔原码就是符号位加上真值的绝对值,即:用第一位表示符号,其余位表示值。

比如:如果是8位二进制:

[+1]   正一的原码 = 0 000 0001

[-1]  负一的原码  = 1 000 0001

        🍪第一位是符号位

        🥝因为第一位是符号位,所以8位二进制数的取值范围就是:(即第一位不表示值,只表示正负。)

         [1111 1111 , 0111 1111]  即 [-127 , 127]

        💧总结一句话:原码是人脑最容易理解和计算的表示方式。

2.反码

        🍔反码的表示方法是:正数的反码是其本身,负数的反码是在其原码的基础上,符号位不变,其余各个位取反。

原码反码
+10 000 00010 000 0001
- 11 000 00011 111 1110

        💧可见如果一个反码表示的是负数,人脑无法直观的看出来它的数值。通常要将其转换成原码再计算。

3.补码

        🍔补码的表示方法是:正数的补码就是其本身,负数的补码是在其原码的基础上,符号位不变,其余各位取反,最后+1。(也即在反码的基础上+1)

原码反码补码
+10 000 00010 000 00010 000 0001
- 11 000 00011 111 11101 111 1111

        💧对于负数,补码表示方式也是人脑无法直观看出其数值的。通常也需要转换成原码再计算其数值

二、原码、反码、补码的计算方法

1.原码

        🍪原码:将最高位作为符号位(0表示正,1表示负),其它数字位代表数值本身的绝对值的数字表示方式。

2.反码

        🍪反码:如果是正数,则表示方法和原码一样;如果是负数,符号位不变,其余各位取反,则得到这个数字的反码表示形式。

3.补码

        🍪补码:如果是正数,则表示方法和原码一样;如果是负数,则将数字的反码加上1(相当于将原码数值位取反然后在最低位加1)。

三、算术操作符

        🍔算数操作符一共有五个

        1、+(加)     

        2、-(减)   

        3、*(乘)     

        4、/(除)   

        5、%(取模)

🔴1. 除了 %(取模) 操作符之外,其他的几个操作符可以作用于整数和浮点数
🔴2. 对于 / (除)操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法。
🔴3. % (取模)操作符的两个操作数必须为整数,返回的是整除之后的余数。


四、移位操作符

<<左移操作符
>>右移操作符

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

1. 左移操作符


        🍟移位规则:左边抛弃、右边补0
        
0f3da134c7af46a6a98c1d0ed0c06882.gif

2. 右移操作符

    🍟移位规则:


        首先右移运算分两种:

        ⭕ 逻辑移位

        ⭕ 算术移位


(1) 逻辑移位


        左边用0填充,右边丢弃
 

815a3cbe2911679b9bc59c667a5b4400.gif

(2) 算术移位


        左边用原该值的符号位填充,右边丢弃

135eaa37956341c7b7341648c1c4282a.png

警告🚨
        对于移位运算符,不要移动负数位,这个是标准未定义的。
例如:

int num = 10;
num>>-1;//error


五、位操作符

 ✅位操作符有:

&
|
^
//按位与
//按位或
//按位异或

🚨注:他们的操作数必须是整数。

1. 按位与运算(AND)

        ✅按位与运算符为 &。其功能是对两个二进制数的每一个二进位进行与运算。

& 按位与: 两个条件同时为真(1)的情况下,运算结果为真,换句话说就是两个条件都是1才为1,否则为0。

  • 1 & 1 = 1

  • 1 & 0 = 0

  • 0 & 1 = 0

  • 0 & 0 = 0

8fa7ba941a53380efe27265c496ef673.png

2. 按位或运算(OR)

        ✅按位或运算符为 |。其功能对两个二进制数的每一个二进位进行或运算。

|  按位或 :任意一个条件为真(1)的情况下,运算结果为1,就是只要有一个1则为1,否则为0。

  • 1 | 1 = 1
  • 1 | 0 = 1
  • 0 | 1 = 1
  • 0 | 0 = 0

37795ca9e902c041cd8926de194662b5.png

3. 按位异或运算(XOR)

        ✅按位异或运算符为 ^。其功能是对两个二进制数的每一个二进位进行异或运算。

^ 按位异或 两个条件中只有一个条件为真(1)的情况下,运算结果为真。也就是说,相异才为 真,相同则为假。

  • 0 ^ 0 = 0

  • 1 ^ 0 = 1

  • 0 ^ 1 = 1

  • 1 ^ 1 = 0

23e4d548cd15c7813a848bc811e79522.png

4. 取反运算(NOT) 

        ✅取反运算符为 ~。其功能是对一个二进制数的每一个二进位进行取反运算。

        取反运算规则:使数字 1 变为 0,0 变为 1。 

  • ~0 = 1
  • ~1 = 0

a3d1d33def71cf7a5b4645999d51f535.png

5. 位运算的应用

(1)判断整数奇偶 

        🍔一个整数,只要是偶数,其对应二进制数的末尾一定为 0;只要是奇数,其对应二进制数的末尾一定为 1。所以,我们通过与 1 进行按位与运算,即可判断某个数是奇数还是偶数。

  1. (x & 1) == 0 为偶数。
  2. (x & 1) == 1 为奇数

(2)二进制数选取指定位 

        🍔如果我们想要从一个二进制数 X中取出某几位,使取出位置上的二进位保留原值,其余位置为 0,则可以使用另一个二进制数 Y ,使该二进制数上对应取出位置为 1,其余位置为 0。然后令两个数进行按位与运算(X & Y),即可得到想要的数。

(3)将指定位设置为 1 

        🍔如果我们想要把一个二进制数 X中的某几位设置为 1,其余位置保留原值,则可以使用另一个二进制数 Y,使得该二进制上对应选取位置为 1,其余位置为 0。然后令两个数进行按位或运算(X | Y),即可得到想要的数。

(4)反转指定位 

       🍔如果我们想要把一个二进制数 X 的某几位进行反转,则可以使用另一个二进制数 Y ,使得该二进制上对应选取位置为 1,其余位置为 0。然后令两个数进行按位异或运算(X ^ Y),即可得到想要的数。

(5)交换两个数 —— 不借助第三变量

        🍔通过按位异或运算可以实现交换两个数的目的(只能用于交换两个整数)。

#include <stdio.h>
int main()
{
int a = 10;
int b = 20;
a = a^b;
b = a^b;
a = a^b;
printf("a = %d b = %d\n", a, b);
return 0;
}

(6)将二进制最右侧为 1 的二进位改为 0 

        🍔如果我们想要将一个二进制数 X 最右侧为 1 的二进制位改为 0,则只需通过 X & (X - 1) 的操作即可完成。

(7)计算二进制中二进位为 1 的个数 

        🍔从“将二进制最右侧为 1 的二进位改为 0 ”中得知,通过 X & (X - 1) 我们可以将二进制 X 最右侧为 1 的二进制位改为 0,那么如果我们不断通过 X & (X - 1) 操作,最终将二进制 X 变为 0,并统计执行次数,则可以得到二进制中二进位为 1 的个数。

#include <stdio.h>
int TheOne(int x)
{
    int count = 0;
    while(x)
    {
        x = x & (x - 1);
        count++;
    }
return count;
}

(8)判断某数是否为 2 的幂次方 

        🍔通过判断 X & (X - 1) == 0 是否成立,即可判断 X 是否为 2 的幂次方。这是因为:

🔴凡是 2 的幂次方,其二进制数的某一高位为 1,并且仅此高位为 1,其余位都为 0。

🔴不是 2 的幂次方,其二进制数存在多个值为 1 的位。

        🍔接下来我们使用 X & (X - 1) 操作,将原数对应二进制数最右侧为 1 的二进位改为 0 之后,得到新值:

  1. 如果原数是 2 的幂次方,则通过 X & (X - 1) 操作之后,新值所有位都为 0,值为 0。
  2. 如果该数不是 2 的幂次方,则通过 X & (X - 1) 操作之后,新值仍存在不为 0 的位,值肯定不为 0。

        💧所以我们可以通过是否为 0 即可判断该数是否为 2 的幂次方。


六、赋值操作符

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

复合赋值符
1、  + =
2、  - =
2、  * =
4、  / =
5、 %=
6、  >>=
7、  <<=
8、  &=
9、  |=
10、^=

        💧这些运算符都可以写成复合的效果

int x = 10;
x = x+10;
x += 10;//复合赋值
//其他运算符一样的道理。这样写更加简洁。

七、单目操作符

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

八、关系操作符

>用于比较左右两个值的大小
>=用于比较左右两个值的大小

<

用于比较左右两个值的大小

<=

用于比较左右两个值的大小
! =用于测试“不相等”
==用于测试“相等”

             这些关系运算符比较简单,但是我们要注意一些运算符使用时候的陷阱。
        🚨警告:在编程的过程中== 和=不小心写错,导致的错误

九、逻辑操作符

&&逻辑与
||逻辑或

1.区分逻辑与和按位与


按位与:1&2----->0
逻辑与:1&&2---->1

2.区分逻辑或和按位或


按位或:1|2----->3
逻辑或:1||2---->1

十、条件操作符(三目操作符)

exp1 ? exp2 : exp3

这个也是三目操作符

      ⭕如果表达式1为真,那么就计算表达式2,表达式2的结果为整个式子的 结果;
      ⭕如果表达式1为假,那么就计算表达式3,表达式3的结果为整个式子的结果。

例:问:将下列式子转化为条件表达式是什么样的?

if (a > 5)
	b = 3;
else 
	b = -3; 

 答案:

b = (a > 5 ? 3 : -3);

 使用条件表达式得到两个数的较大值

#include<stdio.h>
int main(void)
{		
   int a = 0, b = 0, c = 0;
   printf("请输入两个数:\n");
   scanf_s("%d %d", &a, &b);
   c = (a > b ? a : b);
   printf("较大的数为:%d\n", c);
   return 0;
}

十一、逗号表达式

exp1, exp2, exp3, …expN

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

int a = 1;
int b = 2;
int c = (a>b, a=b+10, a, b=a+1);//逗号表达式

        上面C的值最后等于13

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

1. [ ] 下标引用操作符


操作数:一个数组名 + 一个索引值

int arr[10];//创建数组
arr[9] = 10;//实用下标引用操作符。
[ ]的两个操作数是arr和9。

 2. ( ) 函数调用操作符


        🍟接受一个或者多个操作数:第一个操作数是函数名,剩余的操作数就是传递给函数的参数。 

#include <stdio.h>
void test1()
{
printf("hehe\n");
}
void test2(const char *str)
{
printf("%s\n", str);
}
int main()
{
test1(); //实用()作为函数调用操作符。
test2("hello bit.");//实用()作为函数调用操作符。
return 0;
}

3. 访问一个结构的成员

.结构体.成员名
->结构体指针->成员名
#include <stdio.h>
struct Stu
{
    char name[10];
    int age;
    char sex[5];
    double score;
}
void set_age1(struct Stu stu)
{
    stu.age = 18;
}
    void set_age2(struct Stu* pStu)
{
    pStu->age = 18;//结构成员访问
}
int main()
{
    struct Stu stu;
    struct Stu* pStu = &stu;//结构成员访问
    stu.age = 20;//结构成员访问
    set_age1(stu);
    pStu->age = 20;//结构成员访问
    set_age2(pStu);
    return 0;
}

十三、操作符的属性

1. 复杂表达式的求值有三个影响的因素


1. 操作符的优先级
2. 操作符的结合性
3. 是否控制求值顺序。
        两个相邻的操作符先执行哪个?取决于他们的优先级。如果两者的优先级相同,取决于他们的结合性。


操作符优先级(表)

优先级

运算符

名称或含义

使用形式

结合方向

说明

1

[ ]

数组下标

数组名[常量表达式]

左到右

-----

( )

圆括号

(表达式)/函数名(形参表)

-----

.

成员选择(对象)

对象.成员名

-----

->

成员选择(指针)

对象指针->成员名

-----

2

-

负号运算符

-表达式

右到左

单目运算符

(类型)

强制类型转换

(数据类型)表达式

-----

++

前置自增运算符

++变量名

单目运算符

++

后置自增运算符

变量名++

单目运算符

--

前置自减运算符

--变量名

单目运算符

--

后置自减运算符

变量名--

单目运算符 [4] 

*

取值运算符

*指针变量

单目运算符

&

取地址运算符

&变量名

单目运算符

!

逻辑非运算符

!表达式

单目运算符

~

按位取反运算符

~表达式

单目运算符

sizeof

长度运算符

sizeof(表达式)

-----

3

/

表达式/表达式

左到右

双目运算符

*

表达式*表达式

双目运算符

%

余数(取模)

整型表达式/整型表达式

双目运算符

4

+

表达式+表达式

左到右

双目运算符

-

表达式-表达式

双目运算符

5

<<

左移

变量

左到右

双目运算符

>>

右移

变量>>表达式

双目运算符

6

>

大于

表达式>表达式

左到右

双目运算符

>=

大于等于

表达式>=表达式

双目运算符

<

小于

表达式

双目运算符

<=

小于等于

表达式

双目运算符

7

==

等于

表达式==表达式

左到右

双目运算符

!=

不等于

表达式!= 表达式

双目运算符

8

&

按位与

表达式&表达式

左到右

双目运算符

9

^

按位异或

表达式^表达式

左到右

双目运算符

10

|

按位或

表达式|表达式

左到右

双目运算符

11

&&

逻辑与

表达式&&表达式

左到右

双目运算符

12

||

逻辑或

表达式||表达式

左到右

双目运算符

13

? :

条件运算符

表达式1? 表达式2: 表达式3

右到左

三目运算符

14

=

赋值运算符

变量=表达式

右到左

-----

/ =

除后赋值

变量/=表达式

-----

* =

乘后赋值

变量*=表达式

-----

% =

取模后赋值

变量%=表达式

-----

+ =

加后赋值

变量+=表达式

-----

- =

减后赋值

变量-=表达式

-----

<< =

左移后赋值

变量

-----

>> =

右移后赋值

变量>>=表达式

-----

& =

按位与后赋值

变量&=表达式

-----

^ =

按位异或后赋值

变量^=表达式

-----

| =

按位或后赋值

变量|=表达式

-----

15

,

逗号运算符

表达式,表达式,…

左到右

从左向右顺序运算

表格说明

        同一优先级的运算符,运算次序由结合方向所决定。

       😍 简单记就是:! > 算术运算符 > 关系运算符 > && > || > 赋值运算符

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/31055.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

电脑怎么录屏?推荐2款录制电脑屏幕的软件!

案例&#xff1a;我经常需要把电脑上的内容分享给别人&#xff0c;一般通过手机拍摄的方式。这就导致视频十分模糊&#xff0c;给人的观感不太好&#xff0c;有没有什么方法可以实现在电脑上直接录屏&#xff1f; 【我想录制我的电脑屏幕上的内容分享给别人&#xff0c;但是我…

几个SQL的高级写法

一、ORDER BY FLELD() 自定义排序逻辑 MySql 中的排序 ORDER BY 除了可以用 ASC 和 DESC&#xff0c;还可以通过 ORDER BY FIELD(str,str1,...) 自定义字符串/数字来实现排序。这里用 order_diy 表举例&#xff0c;结构以及表数据展示&#xff1a; ORDER BY FIELD(str,str1,..…

【Neo4j教程之CQL函数基本使用】

&#x1f680; Neo4j &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;C…

3d重建+神经渲染

3d重建 基于深度相机(结构光、TOF、双目摄像头)的三维重建基于图像的三维重建&#xff1a;深度学习基于视觉几何的传统三维重建&#xff1a;这种三维重建方法研究时间比较久远&#xff0c;技术相对成熟。主要通过多视角图像对采集数据的相机位置进行估计&#xff0c;再通过图像…

一种对不同类型齐格勒-尼科尔斯 P-I-D 控制器调谐算法研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

常用工具类之AJ-Captcha入门

1.引入MAVEN依赖 若依官方引入的是1.2.7版本。我选择了目前最常用的1.3.0版本。 在项目中给的 ruoyi-framework\pom.xml 添加依赖 <!-- anji滑块验证码 --><dependency><groupId>com.anji-plus</groupId><artifactId>spring-boot-starter-captc…

通过调整图像hue值并结合ImageEnhance库以实现色调增强

前言 PIL库中的ImageEnhance类可用于图像增强&#xff0c;可以调节图像的亮度、对比度、色度和锐度。 通过RGB到HSV的变换加调整可以对图像的色调进行调整。 两种方法结合可以达到更大程度的图像色调增强。 调整hue值 __author__ TracelessLe __website__ https://blog…

vue2中引入天地图及相关配置

前言 项目中需要引入特殊用途的地图&#xff0c;发现天地图比高德地图、百度地图要更符合需求&#xff0c;于是看了看天地图。 正文 vue2项目中如何引入天地图并对相关的配置进行修改使用呢&#xff1f;官方给的4.0版本的使用说明。 引入&#xff1a; 进入到public/index.html中…

Cocos Creator3D:制作可任意拉伸的 UI 图像

推荐&#xff1a;将 NSDT场景编辑器 加入你的3D工具链 3D工具集&#xff1a; NSDT简石数字孪生 制作可任意拉伸的 UI 图像 UI 系统核心的设计原则是能够自动适应各种不同的设备屏幕尺寸&#xff0c;因此我们在制作 UI 时需要正确设置每个控件元素的尺寸&#xff08;size&#…

TypeScript ~ TS 掌握自动编译命令 ③

作者 : SYFStrive 博客首页 : HomePage &#x1f4dc;&#xff1a; TypeScript ~ TS &#x1f4cc;&#xff1a;个人社区&#xff08;欢迎大佬们加入&#xff09; &#x1f449;&#xff1a;社区链接&#x1f517; &#x1f4cc;&#xff1a;觉得文章不错可以点点关注 &…

【CV 向】OpenCV 图形绘制指南

文章目录 引言1. 创建画布2. 绘制线段3. 绘制矩形4. 绘制圆5. 绘制椭圆6. 绘制多边形7. 绘制字体结论 引言 Python OpenCV 是一个功能强大的计算机视觉库&#xff0c;除了图像处理和计算机视觉任务外&#xff0c;它还提供了丰富的功能来绘制各种图形。无论是在计算机视觉应用中…

Springboot程序开启远程DEBUG

一、远程debug的原理 Spring Boot程序远程debug的原理主要是通过在启动时指定JVM参数来启用远程调试模式&#xff0c;并在调试器中连接到程序所在的调试地址&#xff0c;从而实现对程序的远程调试。 具体步骤如下&#xff1a; 在运行Spring Boot程序时&#xff0c;在启动命令…

软考高级系统架构设计师(四) 计算机网络2磁盘阵列

目录 磁盘阵列RAID RAID级别 ​IPV6 网络接入技术 综合布线 磁盘阵列RAID 磁盘阵列&#xff08;Redundant Arrays of Independent Disks&#xff0c;RAID&#xff09;&#xff0c;有"数块独立磁盘构成具有冗余能力的阵列”之意。 磁盘阵列是由很多块独立的磁盘&#…

P35[10-5]硬件IIC配置+读写MPU6050(软)(此处注意与软件iic区别)

接线图如下: 注:硬件读写iic的连接位置固定,可参考引脚定义表(如下) 声明:I2C1重映射时,有一次更换机会,但是此面包板由于OLED的该引脚无法接线,因此只能接在PB10 PB11的I2C2上 软件iic初始化部分:(此处即可替代掉整个软件iic.c初始化的底层) void MPU6050_Init(vo…

MyCat总结

目录 什么是mycat 核心概念 逻辑库 逻辑表 分片节点 数据库主机 用户 mycat原理 目录结构 配置文件 读写分离 搭建读写分离 搭建主从复制&#xff1a; 搭建读写分离&#xff1a; 分片技术 垂直拆分 实现分库&#xff1a; 水平拆分 实现分库&#xff1a; ER表 全局表 分…

IDEA新UI速览,成了VS Code的样子?

IntelliJ IDEA 2023.1 现已发布。此版本包括对新 UI 的改进&#xff0c;根据从用户那里收到的反馈进行了彻底改造。此外还实现了性能增强&#xff0c;从而在打开项目时更快地导入 Maven 和更早地使用 IDE 功能。由于采用了 background commit checks&#xff0c;新版本提供了简…

【学习学习】NLP理解层次模型

NLP&#xff08;Neuro-Linguistic Programming&#xff0c;神经语言程序学&#xff09;&#xff0c;由两位美国人理查得.班德勒&#xff08;Richard Bandler&#xff09;与约翰.葛瑞德&#xff08;John Grinder&#xff09;于1976年创办&#xff0c;并在企业培训中广泛使用。美…

Vue3的计算属性和监听属性

目录 computed 语法介绍 简写版 完整版 watch 介绍 监听ref式数据代码示例 监听reactive式数据 watchEffect函数 computed 语法介绍 与Vue2.x中computed配置功能一致 import {computed} from vuesetup(){...//计算属性——简写let fullName computed(()>{return per…

【C++篇】C++新增的一些基础特性

友情链接&#xff1a;C/C系列系统学习目录 知识总结顺序参考C Primer Plus&#xff08;第六版&#xff09;和谭浩强老师的C程序设计&#xff08;第五版&#xff09;等&#xff0c;内容以书中为标准&#xff0c;同时参考其它各类书籍以及优质文章&#xff0c;以至减少知识点上的…

改进YOLOv8 | 优化器篇 | YOLOv8 引入谷歌 Lion 优化器

论文地址:https://arxiv.org/pdf/2302.06675.pdf 代码地址:https://github.com/google/automl/tree/master/lion 我们提出了一种将算法发现作为程序搜索的方法,并将其应用于发现用于深度神经网络训练的优化算法。我们利用高效的搜索技术来探索一个无限且稀疏的程序空间。为了…