C语言运算符详解

news2024/12/26 23:09:21

详细介绍了C语言表达式、算术运算符、赋值运算符、关系运算符、条件结构、逻辑运算符、位运算符的语法和使用方法,并讨论了运算符的优先级。

1、表达式与算术运算符

在C语言中,表达式是一个类似数学中的算式,表达式由变量、字面值、常量、运算符号构成。表达式的计算结果是一个值,值的类型可以数值,也可以是逻辑值。

例3-1】 计算存款一年本金利息和的表达式

deposit*(1+rate)

在上面的表达式中,deposit是存储存款额度的变量,rate是存储银行年利率的变量,数字1是字面值,符号“*”是乘法运算符,表达式中的括号和数学四则运算的括号意义相同,用于提高括号内子表达式的运算优先级。

观察发现,1+rate也是一个表达式,它符合表达式的定义,在当前表达式中,该表达式为子表达式,因此一个复杂的表达式由多个子表达式构成。

在C语言中,表达式中的运算符号称为运算符,运算符作用的变量、常量、字面值、子表达式称为操作数。例如:运算符号“*”两边的操作数为变量deposit和子表达式(1+rate);运算符号“+”两边的操作数为字面值1和变量rate。

运算符若需要N个操作数参与运算,则称为N目运算符。例如:加法、乘法、除法等运算符都需要两个操作数参与运算,称为双目运算符;自增、自减运算符需要单个操作数参与运算,称为单目运算符。

表达式左侧一般是待赋值的变量,该表达式返回的结果为浮点类型,计算结果赋值给表达式左侧的变量。

例如:

total = deposit*(1+rate)

表达式的计算结果赋值给变量total。

例3-1】表达式的运算符在运算类型属于算术运算符,其作用和数学中的运算符相同,下表列出了C语言支持的算术运算符。

图片

表中的加、减、乘、除运算符比较容易理解和掌握,下面重点介绍取余、自增、自减运算符。

取余运算符

取余运算符是双目运算符,需要两个操作数。可以用来计算两个数之间的余数,它可以用在整数和浮点数之间,但是最终结果只能是整数。运算结果是运算符左边的操作数除以运算符右边的操作数后所得的余数。

假设 a % b =c(余数为d),其中a和b均为整数,则余数d为a % b的结果。

取余运算符可以解决一些简单的数学问题。例如:可以使用取余运算符来检查一个数是否为偶数,如果一个数除以2的余数是0,那么它就是偶数;也可以用来检查一个数是否是3的倍数,如果一个数除以3的余数是0,那么它就是3的倍数。

自增自减运算符

自增自减是单目运算符,只需要一个操作数参加运算。自增和自减从字面上理解就是自身增加或减少,增加或减少多少呢?自增是自身做加1操作,自减是自身做减1操作。在c语言中,并不是所有变量都可以使用自增自减操作符;可以使用自增自减操作符的数据类型有:int、float、double 、char、long。

自增(++):将变量的值加1,分前缀式(如++a)和后缀式(如a++)。前缀式是先加1再使用;后缀式是先使用再加1。

例如:

int  count=10;

printf("count=%d",count++);

上述程序段执行后,输出结果是10还是11呢?count++是后缀式,后缀式是先使用再加1,因此先输出count的当前数值,然后count再做加1操作,输出结果是10。

​​​​​​​

int  count=10;

printf("count=%d",++count);

上述程序段执行后,输出结果是11。因为++count是前缀式,前缀式是变量先自增再使用,变量count先做加1操作,然后再输出变量count的值。

自减(--):将变量的值减1,也分前缀式(如--a)和后缀式(如a--)。前缀式是先减1再使用;后缀式是先使用再减1。

2、赋值运算符

我们回顾一下数学运算符号“=”,在数学中该符号是表示相等的符号,读作“等于”。等号表示两端的数字、算式是相等的。如:2+3=5,就是表示等号左边的2加上3与右边的5是相等的,7-2=2+3表示左右两边算式相等。

在C语言中,也用到了符号“=”,不过和数学中的等号意义完全不同,C语言中的“=”是赋值的意思,该符号是赋值运算符,它是一个双目运算符,它的作用是将右侧的值赋值给左侧的变量。

例如:

int a,b;a = 30;b = a+20;

上述代码执行后,a的值为30,b的值为50。赋值运算符“=”左侧的操作数必须是变量,右侧的操作数可以字面值、变量、常量或表达式,若赋值运算符右边的操作数为表达式,编译器会先计算表达式的值,然后再将值赋值给运算符左侧的变量。

可以在声明变量时为变量赋值:

int a=30,b=a+20;

上面的语句在定义变量b时用到了变量a,因为变量a在变量b之前已被定义,因此上面的语句是合法的。

为了简化计算,C语言还提供了复合赋值运算符,复合赋值运算符是赋值运算符和算术运算符合并成一个新的运算符,该运算符称为复合赋值运算符。使用复合赋值运算符时,被赋值的变量首先使用算术运算符与右侧的数值或算术表达式进行运算,然后将运算结果再赋值给变量。

图片

赋值运算符可以和所有的算术运算符结合构成复合赋值运算符,运算效果等同于上图的“+=”复合赋值运算符。表3-2列出了“+=、-=、*=、/=、%=”复合赋值运算符的描述及例子。

图片

在复合赋值运算符表格中,“例子”一栏中a是变量。运算顺序是先执行算术运算,然后再执行赋值运算。运算符右侧的操作数可以是数值、也可以是算术表达式,算术表达式的运算顺序同数学运算顺序一致。

下面给出复合赋值运算符“+=”的解释说明,其它复合赋值运算符的运算过程基本相同。

复合赋值运算符“+=”,表示的意思是先将运算符左边操作数指向的变量值和右边的操作数执行相加操作,然后再将相加的结果赋值给左边的操作数指向的变量。例如下面语句:

​​​​​​​

int  a = 10;a += 20;

此时,变量a等于30,其过程是变量a先与数值20相加,因为变量a的值是10,因此与数值20相加的结果是30,再将30赋值给变量a,此时变量a的值为30。

3、关系运算符

人们在网上挑选商品时,一般会使用电商的商品价格排序功能,将商品按照价格从低到高排列,然后再看商品的评论多少和评论内容来筛选商品,这样就会大概率买到质优价廉的商品。

图片

电商的商品价格排序功能的核心就是比较商品间的价格高低,也就是比较多个数值的大小,并对数值按从小到大或从大到小排序。

图片

比较两个数值的大小,也就是要弄清两个数之间的大小关系。两个数之间的大小主要存在六种关系,分别是大于关系、大于等于关系、小于关系、小于等于关系、等于关系、不等于关系。例如,对于35和26两个数来说:35大于26就是大于关系;26小于35就是小于关系。

图片

用于比较两个数大小的运算符称为关系运算符,关系运算符是双目运算符,用在关系表达式中。用于判断两个数据之间的关系,例如:大于、等于、不等于,比较的结果是一个整型数值1或 0,1表示“真”,0表示“假”。当条件成立时,运算结果为1;当条件不成立时,运算结果为0。下表列出了C语言支持的比较运算符,表中例子假设A和B不相等且A小于B。

图片

表3-3的A和B是两个整数类型的变量,且A小于B。运算符“==”检查A和B的值是否相等,因为A和B不相等,因此关系表达A==B返回0(假),关系表达式A!=B则返回1(真)。

4、条件结构

我们通过一个编程案例来引入条件结构。

编程案例:要求用户输入两个不相等的整数,如果这两个数的和大于100,则显示“两数和大于100”,否则显示“两数和小于等于100”

应用我们前面学过的C语言知识,类似这样的编程要求很难实现,因为程序需求涉及到了条件判断,并根据条件判断结果选择不同的执行分支。在生活中,也常常会遇到许多需要判断的情况,在这种情况下,需要根据一些条件作出决定和选择。例如,在我们打算出门时,需要判断天气怎么样,如果下雨了,就要带上雨伞;外出旅行时,需要根据不同情况,选择不同的交通工具。

下面我们来学习一种新的程序结构——条件结构。

前面编写的程序都是“顺序流程”,每条语句顺序执行。但是在很多情况下,程序并不是按既定的顺序执行,而是根据不同请况进行判断,然后执行不同的操作,这种流程称为“条件分支流程”,其结构也称为“条件结构”。

图片

条件结构的核心是条件判断,在C语言中,条件判断可以使用关系表达来实现,关系表达式的计算结果返回逻辑真或逻辑假,在C语言中非0数值表示逻辑真,数值0表示逻辑假。若关系表达式返回逻辑真,则执行分支语句块A,否则执行分支语句块B,这里的分支语句块A和分支语句块B是不同的执行语句块,在条件结构中,A语句块和B语句块永远不能同时执行。

在C语言中,提供了if-else语法结构来实现条件结构。

图片

其中if和else是C语言的关键字,<条件>是一个关系表达式、变量或字面值。变量或字面值的类型应为整数、浮点类型。C语言规定非0的数值为逻辑真,数值0为逻辑假。<条件>执行后,若返回逻辑真执行<分支语句块A>,否则执行<分支语句块B>。

在一些情况下,可能只需要执行满足条件的<分支语句块A>,而不需要执行不满足条件的<分支语句块B>,在这种情况下,就可以把else和<分支语句块B>省略掉。

图片

现在,我们已经了解了C语言的条件结构和语法,下面探讨一下如何在条件结构中使用关系表达式。

例如:要测试两个整数类型的变量值num1和num2是否相等,可以编写num1 == num2,然后将其放入一个条件结构中,如下所示:

​​​​​​​

if ( num1==num2 ){    ……}else{    ……}

如果num1和num2的数值相等,则条件为真,执行if后面的语句块,否则条件为假,执行else后面的语句块。

下面我们来实现前面的程序需求,编写程序前,先绘制程序流程图。

图片

在程序流程图中,条件结构使用菱形图形符号表示,该图形符号有一个输入和两个输出分支,分别对应条件判断的逻辑真和逻辑假。

​​​​​​​

程序清单

#include

void main(){

int x,y;

// 提示用户输入两个整数

printf("请输入两个整数数:\n");

// 获取用户的输入

scanf("%d",&x);

scanf("%d",&y);

// 条件结构

if ((x+y) > 100)

printf("x+y>100");

else

printf("x+y<=100");

}

5、逻辑运算符

在数学中,表示一个数值的范围时,经常用不等式来表述。例如:假设一个数值取值范围为0到100,设该数值为x,不等式0

例如:要判断学生的考试成绩是否在90至100范围内,就需要使用逻辑运算符连接两个关系表达式来完成条件判断。

下表列出了C语言支持的逻辑运算符,表中假设整型变量A为真(数值为1),整型变量B为假(数值为0)。

图片

假如考试成绩用变量score表示,下面的语句可以判断score是否在90至100范围内。

score >=90 && score <=100

当score的值在90至100范围内时,上面语句的运算结果为逻辑真(1)。因为运算符“&&”两边的关系表达式的运算结果都为逻辑真(1);当score的值不在90至100范围内时,上面语句的运算结果为逻辑假(0)。因为运算符“&&”两边的关系表达式的运算结果都为逻辑假(0),或有一个关系表达式的运算结果为逻辑假(0)。

例如下面的代码段执行完成后,bJudge的值是1还是0呢?

​​​​​​​

int   a = 10;int   b = 20;int   c = 15;int  bJudge =  c > a && c < b;

上述代码段的最后一条语句同时出现了赋值运算符、关系运算符和逻辑运算符,C编译器会先执行哪个运算操作呢?同数学的四则运算一样,运算符也有优先级,运算顺序由高优先级到低优先级下表列出了运算符的优先级。表中优先级栏,数字越小优先级越高,运算符每个运算符用中文顿号分割。

图片

表中小括号‘()’优先级最高,表达式含有小括号的,优先执行小括号的内容,如果包含多个小括号,执行顺序是从左到右。

例如,假设变量a的值为12,下述语句的执行会有不同的结果:

(1)执行 a + 18 % 4 ,因为运算符%的优先级高于运算符+,该语句先执行取余运算,再执行加法运算,其结果为14;

(2)执行( a + 18 ) % 4 ,因为小括号的优先级最高,该语句先执行小括号里的表达式a+18,再执行取余运算,其结果为2;

(3)执行 a * ( ( a + 18 ) % 4 ),该语句括号内嵌套括号,执行顺序是先执行内层括号的运算,再执行外层括号的运算,其运算结果为24。

了解了运算符的优先级,现在可以确定下述语句:

int  bJudge =  c > a && c < b;

bJudge的值为数值1(逻辑真)。

逻辑与运算符“&&”连接了2个关系表达式,分别是c > a和c < b,如果这两个表达式计算结果都为真,则bJudge为1(真),否则bJudge为0(假)。此时bJudge的值为1(真)。该运算符还有一个特点,当左侧的关系表达式或变量为0(假)时,则直接返回结果0(假),不再执行运算符右侧的表达式。

逻辑或运算符“||”,用于判断运算符两边的条件表达式或整型变量是否有一个为真,如果有一个为真,返回结果为1(真),否则返回0(假)。

逻辑非运算符“!”,用于判断运算符两边的条件表达式或整型变量是否有一个为1(真),如果有一个为1(真),返回结果为1(真),否则返回0(假)。

6、位运算

位运算在嵌入式开发编程中是常用的一种运算,单片机的控制方式都是通过寄存器完成的,寄存器操作一般采用位运算或移位运算。

C语言提供了六种位运算操作符,分别是按位与(&)、按位或(|)、按位异或(^)、按位取反(~)、左移(<<)、右移(>>)。

图片

注意:下面案例使用的数字8和14均为unsigned char类型,因为有符号整数进行位运算后,其符号位可能会改变。

按位与(&)

按位与的运算符是“&”,它是一个双目运算符,它对运算符两边的操作数按位进行逻辑与运算,其运算规则是:0&0=0;   0&1=0;    1&0=0;     1&1=1,即:两位同时为1,结果才为1,否则为0。

例如:8 & 14 的结果是8。

图片

数字8的二进制数是0000 1000,数字14的二进制数是00010 1110,两个二进制数每位进行逻辑与运算,结果是0000 1000。

按位与运算符在嵌入式开发中应用非常广泛,它可以用来判断寄存器中的某一位是否为 1,也可以用来对寄存器某些位进行清零操作。

假设一个8位寄存器AH的值为0x12,对应的二进制数为0001 0010,若需要判断第2个二进制位(从低位到高位)是否为1,可将AH与0x02进行与运算,若运算结果为0x02,则第2个二进制位为1,否则为0。

​​​​​​​

void main(){  unsigned char AH = 0x12;  if( 0x02 == (AH & 0x02) )  {      printf("AH寄存器第2个二进制位为1");  }  else  {      printf("AH寄存器第2个二进制位为0");  }

}

上述代码段的条件判断也可以使用下面的语句:

if(  AH & 0x02  )

因为0x02的二进制数位0000 0010,只有第2个二进制位为1,其它二进制位都为0,与AH进行与运算后,若AH第2个二进制位为1,则运算结果为0x02,否则运算结果为0,在C语言中,不为0的数值都为逻辑真。

按位或(|)

按位或的运算符是“|”,它是一个双目运算符,它对运算符两边的操作数按位进行逻辑或运算,其运算规则是:0|0=0;   0|1=1;    1|0=1;     1|1=1,即:两位只要有一个为1,其值为1,其它都为0。

例如:8 | 14 的结果是14。

图片

按位异或(^)

按位异或的运算符是“^”,它是一个双目运算符,它对运算符两边的操作数按位进行逻辑异或运算,其运算规则是:0^0=0;  0^1=1;  1^0=1;  1^1=0,即:如果两个相应位为“异”(值不同),则该位结果为1,否则为0。

例如:8 ^14 的结果是6。

图片

按位取反(~)

按位取反的运算符是“~”,它是一个单目运算符,它对操作数按位进行逻辑非运算,其运算规则是::~0=1;  ~1=0;,即:0变为1,1变为0。

例如:~8的结果是247。

图片

左移(>>)

左移运算符是“>>”,它是双目运算符,它可以将运算符左边的操作数向左移动指定的位数,移动的位数由运算符右边的操作数给出,移动方向为从左到右,移动到左边界之外的多余二进制位会被丢弃,并从右边移入0。

例如:8 >>2 的结果是32。

图片

从计算结果可以看出,左移 n 位相当于将这个数乘以 2 的 n 次方。

右移(<<)

右移运算符是“<<”,它是双目运算符,它可以将运算符左边的操作数向右移动指定的位数,移动的位数由运算符右边的操作数给出,移动方向为从右到左,移动到右边界之外的多余二进制位会被丢弃,并从左边移入0(无符号整数),对于有符号数整数,需要注意符号位的处理,如果移位的操作数是正数,右移时会在左边填充 0,如果是负数,右移时会在左边填充 1。

例如:8 >> 2 的结果是2。

图片

从计算结果可以看出,右移 n 位相当于将这个数除以 2 的 n 次方。

位运算可以应用到位掩码技术,位掩码用于操作和检测一组二进制数据中的特定二进制位,通过掩码,我们可以方便地设置、清除或者翻转一组二进制数据中的特定二进制位。例如,我们可以定义一个掩码来提取一个字节的低4位。

​​​​​​​

#includevoid printf_binary(unsigned char n);void main(){   unsigned char AH = 0xab;   unsigned char mask = 0x0f;   printf_binary(AH);   printf_binary(AH&mask);}
void printf_binary(unsigned char n){    char i=0;    for(i=0; i<8; i++ )    {       if(n&(0x80>>i)){          printf("1");       }else       {          printf("0");       }     }    printf("\n");}

在上面的程序代码中,定义了printf_binary()函数,该函数将传入的参数n转换为二进制数并输出,函数内用到了循环语句,它可以重复执行相同的代码段,循环语句的语法后面还会讲述。

变量mask是我们定义的掩码 ,变量的值为0x0f,它的二进制表示为 00001111,mask与变量AH进行位与运算,运算的结果为变量AH的低4位。程序的输出结果见下图。

图片

位运算一般在嵌入式开发中应用,用于配置单片机的寄存器,也会使用到一些高效的程序算法中。

7、运算符的优先级

C表达式可能存在多个运算符,运算符之间存在优先级的关系,级别高的运算符先执行运算,级别低的运算符后执行运算算,下表列出了运算符的优先级。表中优先级栏,数字越小优先级越高,运算符每个运算符用中文顿号分割。

图片

表中小括号‘()’优先级最高,表达式含有小括号的,优先执行小括号的内容,如果包含多个小括号,执行顺序是从左到右。

在C语言中,运算符的优先级决定了表达式中运算执行的顺序。高优先级的运算符将在低优先级的运算符之前被执行。例如,乘法和除法运算符的优先级高于加法和减法运算符。

以下是如何判断C语言运算符优先级的步骤:

(1)了解C语言中的运算符类型。C语言中有多种运算符,包括算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符等。每种运算符都有不同的优先级。

(2)确定运算符的优先级。C语言中,运算符的优先级由高到低分为七个级别,下面列出了这些级别,以及相应的运算符:

* 后缀运算符:++、--

* 一元运算符:++、--、+、-、~、!

* 乘法 / 除法 / 取余:*、/%、

* 加法 / 减法:+、-

* 移位运算符:<<、>>

* 关系运算符:<、>、<=、>=

* 等于不等于:==、!=

* 位与运算符:&

* 位异或运算符:^

* 位或运算符:|

* 逻辑与运算符:&&

* 逻辑或运算符:||

* 条件运算符:? :

* 赋值运算符:=、+=、-=、*=、/=、%=、<<=、>>=、&=、^=、|=

(3)根据优先级确定表达式的执行顺序。在复杂的表达式中,根据优先级确定运算执行的顺序非常重要。例如,在表达式`a = b + c * d`中,乘法运算将在加法运算之前执行,因为乘法的优先级高于加法。

以下是一段根据C语言自增、自减、关系运算符、算术运算符优先级的示例代码,代码中包含了对这些运算符的用法的注释,并附带了示例和预期的输出结果。

​​​​​​​

#includeint main() {    int a = 5;  // 初始化变量a为5    int b = 3;  // 初始化变量b为3    // 算术运算符优先级: 加法 > 减法 > 乘法 > 除法 > 取余    // 关系运算符优先级: < > <= >= == !=    // 自增自减运算符优先级: ++ --    // 算术运算符示例    printf("a + b = %d\n", a + b);  // 输出: a + b = 8    printf("a - b = %d\n", a - b);  // 输出: a - b = 2    printf("a * b = %d\n", a * b);  // 输出: a * b = 15    printf("a / b = %d\n", a / b);  // 输出: a / b = 1    printf("a % b = %d\n", a % b);  // 输出: a % b = 2
    // 关系运算符示例    printf("a > b? %s\n", a > b ? "Yes" : "No");  // 输出: a > b? No    printf("a < b? %s\n", a < b ? "Yes" : "No");  // 输出: a < b? Yes    printf("a >= b? %s\n", a >= b ? "Yes" : "No");  // 输出: a >= b? Yes    printf("a <= b? %s\n", a <= b ? "Yes" : "No");  // 输出: a <= b? No    printf("a == b? %s\n", a == b ? "Yes" : "No");  // 输出: a == b? No    printf("a != b? %s\n", a != b ? "Yes" : "No");  // 输出: a != b? Yes        // 自增自减运算符示例    printf("a++ + b = %d\n", a++ + b);  // 输出: a++ + b = 8 (这里,a先自增,然后和b相加,所以原来的a=5+1=6)    printf("a + b = %d\n", a + b);  // 输出: a + b = 8 (这里,a先和b相加,然后自增,所以原来的b=3)    printf("a-- + b = %d\n", a-- + b);  // 输出: a-- + b = 11 (这里,a先自减,然后和b相加,所以原来的a=6--)    printf("a + b = %d\n", a + b);  // 输出: a + b = 14 (这里,a先和b相加,然后自减,所以原来的b=3)    return 0;
}


上述代码展示了C语言中的算术运算符、关系运算符以及自增自减运算符的优先级和用法,每行代码前添加了详细的注释,运行这段代码应该没有错误,并会按照预期的方式输出结果。

收录于合集 #C语言入门

 10个

上一篇C语言输入与输出函数下一篇C语言控制流程:条件结构

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前端开发工具集合

文章目录 Visual Studio Code (VS Code)安装及配置一、安装二、常用插件三、相关配置四、统一配置代码 Visual Studio Code (VS Code)安装及配置 一、安装 下载地址&#xff1a;https://code.visualstudio.com/ ?> VS Code 下载慢&#xff0c;解决办法请点击 双击下载文件…

@JsonCreator和@JsonValue

文章目录 1、正常反序列化的过程2、JsonCreator3、JsonValue4、应用&#xff1a;枚举类中校验传参以及优化前后端数据交互5、补充&#xff1a;ConstructorProperties 1、正常反序列化的过程 反序列化时&#xff0c;默认会调用实体类的无参构造来实例化一个对象&#xff0c;然后…

二叉树题目:具有所有最深结点的最小子树

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 题目 标题和出处 标题&#xff1a;具有所有最深结点的最小子树 出处&#xff1a;865. 具有所有最深结点的最小子树 难度 5 级 题目描述 要求 给定…

web前端开发基础------外边距折叠现象

引言 在设置样式时&#xff0c;需要遵循先整体再细节&#xff0c;先通用样式再特殊样式的顺序进行设置 一&#xff0c;什么是外边距折叠现象呢&#xff1f; 外边距折叠 定义&#xff1a; 外边距折叠是指相邻的两个或者多个外边距&#xff08;margin&#xff09;在垂直方向会合并…

分布式锁之基于mysql实现分布式锁(四)

不管是jvm锁还是mysql锁&#xff0c;为了保证线程的并发安全&#xff0c;都提供了悲观独占排他锁。所以独占排他也是分布式锁的基本要求。 可以利用唯一键索引不能重复插入的特点实现。设计表如下&#xff1a; CREATE TABLE tb_lock (id bigint(20) NOT NULL AUTO_INCREMENT,…

最小二乘线性回归

​ 线性回归&#xff08;linear regression&#xff09;&#xff1a;试图学得一个线性模型以尽可能准确地预测实际值的输出。 以一个例子来说明线性回归&#xff0c;假设银行贷款会根据 年龄 和 工资 来评估可放款的额度。即&#xff1a; ​ 数据&#xff1a;工资和年龄&…

企业必看的大数据安全极速传输解决方案

在这个大数据时代&#xff0c;企业在享受大数据带来的便利同时&#xff0c;也面临着巨大的挑战&#xff0c;其中最主要的问题就是数据安全方面和传输方面&#xff0c;为了更好地满足企业大数据传输的需求&#xff0c;小编将深入分析企业对于大数据传输面临的挑战和风险以及大数…

[PTQ]均匀量化和非均匀量化

均匀量化和非均匀量化 基本概念 量化出发点&#xff1a;使用整型数据类型代替浮点数据&#xff0c;从而节省存储空间同时加快推理速度。量化基本形式 均匀量化&#xff1a;浮点线性映射到定点整型上&#xff0c;可以根据scale/offset完成量化/反量化操作。非均匀量化 PowersO…

containerd Snapshots功能解析

containerd Snapshots功能解析 snapshot是containerd的一个核心功能&#xff0c;用于创建和管理容器的文件系统。 本篇containerd版本为v1.7.9。 本文以 ctr i pull命令为例&#xff0c;分析containerd的snapshot “创建” 相关的功能。 ctr命令 ctr image相关命令的实现在cmd…

OpenAI“宫斗”新进展!Sam Altman将重返OpenAI担任首席执行官 董事会成员改动

在经过激烈的五天讨论和辩论之后&#xff0c;高调人工智能初创公司OpenAI宣布&#xff0c;其联合创始人之一Sam Altman将回归担任首席执行官。这一决定是对上周Altman突然被解雇的回应&#xff0c;该决定引起了极大的关注和讨论。 OpenAI表示&#xff0c;他们已经达成了与Altm…

低代码平台推荐:五大低代码厂商谁的模式更“合适”

随着数字化时代的到来&#xff0c;低代码开发平台作为提高数字生产力的工具正受到越来越多企业的关注&#xff0c;市面上的低代码产品和厂商更是“乱花渐欲迷人眼”。 各家产品不仅功能各有不同&#xff0c;甚至商机都有区别的情况&#xff0c;如何做好产品选型已然成了采购企…

2023年国内好用的企业网盘推荐

2023年企业网盘俨然已经成为了各个企业团队的标配了&#xff0c;那么2023年国内有什么好用的企业网盘吗&#xff1f;2023国内哪个企业网盘好用&#xff1f; 国内哪个企业网盘好用&#xff1f; 由于不同行业企业对于企业网盘的具体需求点不同&#xff0c;因此我们无法从功能上评…

idea 2023 安装配置 Gradle8.4

官网&#xff1a;https://gradle.org 下载 Gradle8.4 https://gradle.org/releases/ 解压到本地&#xff0c;到 gradle-8.4\init.d 目录下新建文件&#xff1a;init.gradle 这里有个坑&#xff0c;编译报http协议安全的问题&#xff0c;解决办法&#xff0c;加入&#xff1…

【EI会议征稿】第十一届先进制造技术与材料工程国际学术会议 (AMTME 2024)

JPCS独立出版/高录用快检索/院士杰青云集 第十一届先进制造技术与材料工程国际学术会议 (AMTME 2024) 2024 11th International Conference on Advanced Manufacturing Technology and Materials Engineering 第十一届先进制造技术与材料工程国际学术会议 (AMTME 2024) 定于…

前端处理返回数据为数组对象且对象嵌套数组并重名的数据,合并名称并叠加数据

前端处理返回数据为数组对象且对象嵌套数组并重名的数据&#xff0c;合并名称并叠加数据 var newList[]; var table{}; var dataObj{}; var finalList[]; var tableData[{brName:营业部,dateStr:2023-11-23,tacheArr:[{dealCnt:20,tacheName:奔驰}]},{brName:营业部,dateStr:2…

软件开发团队如何确保团队成员与项目进度一致?

在软件开发团队中&#xff0c;确保团队成员的利益与项目进度保持一致&#xff0c;可以采取以下措施&#xff1a; 建立基础流程&#xff1a;建立几个最主要的流程&#xff0c;如任务跟踪、开发效率提升、任务完成等&#xff0c;可以帮助小团队从无序逐步进入有序。 关注员工反馈…

【逆向】NahamCon CTF -Click Me Writeup(BridaFrida Hook 拿Flag)

文章目录 前言一、样式与功能点二、反编译三、Frida Get Flag四、BurpSuite插件-Brida总结 前言 第一次做外国CTF比赛的mobile challenge 题&#xff0c;题目就是一个安卓的apk安装包。顺便记录一下代码分析过程以及分享两种不同的解题思路。 提示&#xff1a;以下是本篇文章正…

选对软件公司,助力小程序商城腾飞

选择一家合适的软件公司对于小程序商城的开发和运营至关重要。在众多的软件公司中&#xff0c;如何找到最适合自己的合作伙伴呢&#xff1f;本文将从实际需求、公司实力、案例展示、服务态度和价格等五个方面&#xff0c;为您解析如何选择合适的软件公司。 一、明确实际需求 在…

用「超舒适」突围,星纪元 ES 加量不加价

在 2023 广州车展上&#xff0c;星途星纪元 ES 正式开启预售&#xff0c;新车预售区间 24.8-35.8 万元&#xff0c;共推出五款车型配置。 外观方面&#xff0c;星纪元 ES 前脸采用了封闭式的设计&#xff0c;前大灯组采用了流行的贯穿式设计搭配矩阵大灯&#xff0c;使得整个灯…