关系运算符有哪些_c语言标识符关键字有哪些「建议收藏」

关系运算符有哪些_c语言标识符关键字有哪些「建议收藏」本文给出了C语言中基础知识速查表,其中包括了转义字符、分隔符、运算符及其结合性优先级、占位符、表达式、数据类型占用空间,持续更新中

关系运算符有哪些_c语言标识符关键字有哪些「建议收藏」"

前言

本文给出了C语言中基础知识速查表,其中包括了转义字符、分隔符、运算符及其结合性优先级、占位符、表达式、数据类型占用空间,持续更新中,欢迎大家批评指正。

一、转义字符

​ 转义字符用于表示ASCII码字符集中的格式控制符和特定功能字符,这些字符都是不可直接打印的,需要在前添加转义字符()或用一个八进制或十六进制数表示。

​ ⭐️使用转义字符的注意事项:

  • 在C51程序中,不可打印字符必须用转义字符表示
  • 转义字符只能用小写字符来表示,每个转义字符只能看做一个字符
  • \v\f 换页符在屏幕显示时没有影响,但在打印输出时,会影响到打印机的操作
转义字符 含义 ASCII码值(十进制)
\a 响铃(BEL) 007
\b 退格(BS) 008
\f 换页(FF) 012
\n 换行(LF) 010
\r 回车(CR) 013
\t 水平制表(HT) 009
\v 垂直制表(VT) 011
\ 反斜杠 092
? 问号字符 063
单引号字符 039
双引号字符 034
\0 空字符(NULL) 000
\ddd 任意字符 三位八进制数
\xhh 任意字符 二位十六进制

二、分隔符

​ 分隔符在C51中起辅助标识和分界的作用,简单的分隔符是由除字母、数字、下划线以外的单个ASCII字符组成的符号,复合分隔符则产生于特定的简单分隔符的组合,它们常用于数组、结构、指针以及语句等情况。

序号 分隔符 说明
1 ; 用于语句末尾,隔离语句
2 [] 主要用于对数组的说明
3 () 隔离参数,如s=area®
4 , 隔离,可用于多个相同类型的变量标识符定义、函数语句等
5 {} 复合语句的隔离,如for{i=0;i<4;i++}及块结构等
6 * 作指针,如 char *p1;
7 # 预处理的伪命令,如 #define PI=3.14159;
8 ^ 用于标识特殊寄存器的位,如 sbit 10=P1^0

三、运算符

运算符时表示特定的算术或及逻辑操作的符号,也称操作符
👉在C语言中,主要有四大类运算符:

  • 算术运算符
  • 关系运算符
  • 逻辑运算符
  • 位运算符

👉还有一些用于辅助完成复杂功能的特殊运算符,如:

  • “,”(逗号)运算符
  • “?”(问号)运算符
  • 地址操作运算符
  • 联合操作符
  • sizeof 运算符
  • 类型转换运算符

1. 算术运算符

序号 算术运算符 说明 实例
1 进行减法或取负值的运算 5-3=2
2 + 进行加法运算 2+2=4
3 * 乘法运算 1*2=2
4 / 除法运算,取结果的整数部分 10/4=2
5 % 除法运算,取结果的余数部分,不能用于浮点数的运算 9%4=1
6 进行自减(减一),a–为先赋值后减一,–a为先减一后赋值 见程序
7 ++ 进行自增(加一),a++为先赋值后加一,++a为先加一后赋值 见程序
#include "stdio.h"

void main()
{ 
   
    int x, y, z1, z2;
    x=10, y=21;
    
    z1 = (x++) + (x++);                // x先赋值后加一:第一个括号的值为10,x加一为11,第二个括号内的值为11,x加一为12
    printf("x=%d, z1=%d\n", x, z1);    // z1 = 10+11 = 21, x = 12
    
    z2 = (++y) + (++y);                // y先加一后赋值:y加一为22,第一个括号的值为22,y加一为23,第二个括号内的值为23
    printf("y=%d, z2=%d\n", y, z2);    // z2 = 22+23 = 45, y = 23
}

2. 逻辑运算符

序号 逻辑运算符 说明
1 ! 进行逻辑非运算
2 || 进行逻辑或运算
3 && 进行逻辑与运算

逻辑运算符操作对象可以是整型数据、浮点型数据以及字符型数据,非零值为真(1),零值为假(0)。

⭐️其真值表如下:

A B A&&B A||B !A
0 0 0 0 1
0 1 0 1 1
1 0 0 1 0
1 1 1 1 0

3. 关系运算符

关系运算符主要用于比较操作数的大小关系,常与逻辑运算符联合使用:若表达式为True(真)则返回值为1,若表达式为False(假)则返回值为0。

序号 关系运算符 说明
1 > 判断是否大于
2 >= 判断是否大于等于
< 判断是否小于
4 <= 判断是否小于等于
5 == 判断是否相等
6 != 判断是否不等

4. 位运算符

位运算符是对字节或字的二进制位(bit)进行逐位逻辑处理或移位的运算符,它的操作对象是整型和字符型数据的字节或字,**不能用于float、double、long double、void或其它聚合类型 **。

位运算中的AND、OR和NOT(1的补码)的真值表与逻辑运算等价,唯一不同的是,位操作首先将操作数分解成二进制,然后逐位进行计算。

C51语言中的位运算符如下:

  • “&”运算符
  • “|”运算符
  • “^”运算符
  • “~”运算符
  • “>>”运算符
  • “<<”运算符

例如,将a=56和b=37分别进行进行按位与、按位或、按位非、按位异或运算:

56 0 0 1 1 1 0 0 0
37 0 0 1 0 0 1 0 1
& 0 0 1 0 0 0 0 0
| 0 0 1 1 1 1 0 1
^ 0 0 0 1 1 1 0 1

4.1 按位与运算符

&运算符是将两个操作数按二进制展开,然后将对应位进行逻辑与运算。它是二目运算符,即要求有两个源操作数。如果操作数对应的二进制位均为1,则逻辑与的结果为1,否则为0。如 a&b=32;

4.2 按位或运算符

|运算符是将两个操作数按二进制展开,然后将对应位进行逻辑或运算。是二目运算符。如果操作数对应的二进制位均为0,则逻辑或的结果为0,否则为1。a|b=61

4.3 按位非运算符

~运算符是将两个操作数按二进制展开,然后每位取反,即0变1、1变0。是一目运算符

4.4 按位异或运算符

^ 运算符是将两个操作数按二进制展开,然后对应位进行逻辑异或运算。是二目运算符。如果对应的二进制为均为0或均为1,则逻辑异或的结果为0;否则,只要对应位不相同,则逻辑异或的结果为1。a^b=29

A B A^B
0 0 0
0 1 1
1 0 1
1 1 0

4.5 移位运算符

  • 变量名(操作数)>> 右移位数 表示右移运算,对无符号位数左端补0,称为“逻辑右移”;如果为负数,即符号位为1,则左端补1,称为“算术右移”
  • 变量名(操作数)<< 左右位数表示左移运算,与右移运算操作相反
  • C51语言中的移位不是循环移位,当某位从一端移出时,一端移入0,移出的位永远丢失。
  • 左移运算有时可用来作乘法,右移运算有时可用来作除法。如下表可看出,每左移一位,结果乘2,每右移一位相当于除以2
字符x 每个语句执行后的x x的值
x=7 00000111 7
x<<1 00001110 14
x<<3 01110000 112
x<<2 11000000 192
x>>1 01100000 96
x>>2 00011000 24
#include "stdio.h"

void main()
{ 
   
    int a, b, c;
    a=23, b=217;
    printf("a&b = %d\n", a&b);		// a&b = 17
    printf("a|b = %d\n", a|b);		// a|b = 223
    printf("a^b = %d\n", a^b);		// a^b = 206
    printf("~a = %d\n", ~a);			// ~a = -24
    printf("a<<3 = %d\n", a<<3);	// a<<3 = 184
    printf("b>>2 = %d\n", b>>2);	// b>>2 = 54
}

5 特殊运算符

5.1 , 运算符

,运算符是把几个表达式串在一起,并用括号括起来,按照顺序从左向右计算的运算符。该运算符左侧表达式的值不作为返回值,只有最右侧表达式的值作为整个表达式的返回值。

#include "stdio.h"

void main()
{ 
   
    int a, b, c;
    a = 37;
    b = 179;
    c = (a++, ++b, a+b);
    printf("c=%d\n", c);      // 输出为 c=218 
}

5.2 ? 运算符

EXP1?EXP2:EXP3;

首先计算表达式1的值,如果为真,则计算表达式2的值;如果为假,则计算表达式3的值。等价于if...else

#include "stdio.h"

void main()
{ 
   
    int x, y;
    x = 17;
    y = x>5?10:20;
    printf("y = %d\n", y);
}

5.3 sizeof 运算符

sizeof运算符返回变量所占的字节或类型长度字节。是单目操作符

#include "stdio.h"

void main()
{ 
   
    int x, y;
    char ch[] = "hello world";
    x = sizeof(ch);
    y = sizeof(float);
    printf("ch字符串长度为%d,float型数据长度为%d", x, y);
}

5.4 赋值运算符

(DataType)left value = (DataType)right value

其中,左值为变量、右值为常量且两者数据类型必须一致,否则要进行cast(类型转换)

cast(类型转换):去掉声明中的变量名和末尾的分号,再用括号将剩下的部分“封装”起来,例如,因为声明一个浮点型的函数指针:float (*h)(),则 (float(*)())表示“指向浮点类型的函数指针”的类型转换符。

再看例子,(*fp)()是一个函数指针,调用时可直接通过其函数名调用,而ANSIC标准允许程序员将fp()作为其简写形式,就好比*(fp())与ANSIC中的*((*fp)())一样。因此,要在计算启动时调用首地址位置为0的子例程(即表示为(void(*)(void))0,表示“返回值为void类型、参数为void类型的函数指针”),可以表示为(*(void(*)(void))0),表示“将常数0转化为指向void类型的函数的指针”;同时,也可用typedef void (*funcptr)()替代。

5.5 ⭐️地址操作符

用来对变量的地址进行操作。主要分为两种:

  • *运算符是单目操作符,返回位于某个地址内存储的变量值
  • &运算符是一个单目操作符,返回操作数的地址
#include "stdio.h"

void main()
{ 
   
    char ch1, ch2;
    char *p;							// 定义指针型变量
    ch1 = 'A';
    p = &ch1;							// 将变量ch1的地址赋值给p
    ch2 = *p;							// 对指针p解引用,将p所指向的地址内的值赋给ch2
    printf("ch2 = %c\n", ch2);	// 输出为:ch2 = A
}

5.6 联合操作符

<变量1>=<变量1><操作符><表达式>

联合操作符简化后的🔽

<变量1><操作符>=<表达式>

举个例子🌰

  • a=a+b => a+=b
  • a=a/(b+1) => a/=b+1
  • a=a&b => a&=b

5.7 类型转换运算符

(类型)表达式
👉详见文章

四、 运算符优先级和结合性

  • 可以用括号()修改计算的优先级顺序
  • 右结合性即变量(或常量)与右边的运算符结合,C51语言中具有右结合性的运算符包括所有单目运算以及三目运算符,其他都是左结合性
运算符(高→低) 结合性 运算符类型
() [] – > . 从左至右 双目运算符
! ~ ++ – sizeof + – * &(类型转换) 从右至左 单目运算符
* / % 从左至右 双目运算符
+ – 从左至右 双目运算符
<< >> 从左至右 双目运算符
< <= > >= 从左至右 双目运算符
== != 从左至右 双目运算符
& 从左至右 双目运算符
^ 从左至右 双目运算符
| 从左至右 双目运算符
&& 从左至右 双目运算符
|| 从左至右 双目运算符
?: 从右至左 三目运算符
= += -= *= /= %= &= ^= |= <<= >>= 从左至右 双目运算符
  • 依据上表可以得出优先级:
  1. 数组下标、函数调用操作符及各结构成员选择操作符
  2. 单目运算符
  3. 双目运算符
    1. 算术运算符
    2. 移位运算符
    3. 关系运算符
    4. 逻辑运算符
    5. 赋值运算符
  4. 三目运算符(条件运算符)

五、 C语言表达式

表达式

操作数

运算符

常量

变量

算术运算符

逻辑运算符

关系运算符

位运算符

特殊运算符

表达式可分为以下几种类型:

  • 算术表达式
  • 赋值表达式
  • 逗号表达式
  • 关系表达式
  • 逻辑表达式

1. 算术表达式

#include "stdio.h"

void main()
{ 
   
    int x, y, i, j;
    i=105, j=2;
    x=i+j*2;
    y=(i-j*2)%3;
    printf("x=%d, y=%d\n", x, y);
}

2. 赋值表达式

<变量><赋值运算符><表达式>

首先求解赋值运算符右边的表达式的值,然后将该值赋给左边的变量。注意:C51同C语言一样都是强数据类型,在使用赋值表达式时,要注意数据类型的转换。

3. 逗号表达式

表达式1, 表达式2, 表达式3, .......

  • 一个逗号表达式还可以与另一个表达式组成新的逗号表达式,计算时从左向右计算
  • 逗号表达式可以构成嵌套结构,即逗号表达式中的表达是可以是逗号表达式,计算时从左向右,整个表达式的值为最后一个表达式的结果
  • 在程序中,需要区分逗号分隔符和逗号表达式。例如,在变量声明、函数参数表中逗号只是用作变量之间的分隔符

4. 关系表达式

关系表达式又称比较运算,它的计算结果为逻辑”真“或逻辑”假“。当结果为真时,表达式的值为1;当结果为假时,表达式的值为0。

5. 逻辑表达式

逻辑表示的操作对象可以是任意数据类型,返回值为逻辑值。

关系表达式常与逻辑表达式结合在一起使用的,常用于程序控制语句中控制流程运算。用于控制程序的流程时,要配合if、while和for语句来使用。

六、占位符

格式化占位符 说明
%d 有符号的十进制整型数(signed int)
%nd 输出n位整数
%u 十进制整型数(unsigned int)
%o 八进制整型数
%x 十六进制整型数
%hd 短整型数(short)
%ld, %Ld 长整型(long)
%lld 长长整型(long long)
%lu 无符号长整型(unsigned long)
%llu 无符号长长整型(unsigned long long)
%c 一个字符(char)
%s 一个字符串
%f 单精度浮点型数据
%n.mf 整数位保留n位数(自右向左),小数位保留m位数(自左向右)
%-n.mf 整数位保留n位数,小数位保留m位,左对齐输出(若数值小于指定输出格式,右端补空格)
%p 输出为指针类型

七、数据类型占用的内存空间

👉数据类型在不同系统的编译器下占有不同的存储空间,如在老式IBM PC中,int的宽度是16位,而在Windows XP、Windows Vista、Windows 7、Macintosh OS X及其他系统中,int的宽度为32.:

数据类型 16位编译器 32位编译器 64位编译器
char 1Byte 1B 1B
int 2B 4B 4B
float 4B 4B 4B
double 8B 8B 8B
short int 2B 2B 2B
unsigned int 2B 4B 8B
long 4B 4B 8B
unsigned long 4B 4B 8B
long long 8B 8B 8B


表1 不同系统下的编译器位数

👉以32位系统为例,不同数据类型的取值范围不同:

类型 字节数 位数 取值范围
signed char 1 8 -128~127
unsigned char 1 8 0~255
signed short 2 16 -32768~32767
unsigned short 2 16 0~65535
signed int 4 32 -2147483648~2147483647
unsigned int 4 32 0~4294967295
signed long 4 32 -2147483648~2147483647
unsigned long 4 32 0~4294967295
signed long long 8 64
unsigned long long 8 64


表2 不同数据类型所占空间

头文件limits.h定义了符号常量来表示类型限制👇

符号常量 表示
CHAR_BIT char的位数
CHAR_MAX char的最大值
CHAR_MIN char的最小值
SCHAR_MAX signed char的最大值
SCHAR_MIN signed char的最小值
UCHAR_MAX unsigned char的最大值
UCHAR_MIN unsigned char的最小值
SHRT_MAX short的最大值
SHRT_MIN short的最小值
USHRT_MAX unsigned short的最大值
INT_MAX int的最大值
UINT_MAX unsigned int的最大值
LONG_MAX long的最大值
ULONG_MAX unsigned long的最大值
LLONG_MAX long long的最大值
ULONG_MAX unsigned long long的最大值


表3 limits.h中定义的符号常量
今天的文章关系运算符有哪些_c语言标识符关键字有哪些「建议收藏」分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/84791.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注