关键字与运算符

1.关键字

C语言提供了丰富的关键字,这些关键字都是语言本身预先设定好的,发挥特定特定的作用,用户自己是不能创造关键字的,对变量,结构体命名时也不可以使用关键字。
关键字一共有32个,我们对其简单分类

(1)数据类型

包括char double enum int long void float short struct typedef
其中typedef关键字可以改变数据类型的名称
如把int改成size
后面使用size来定义数据的时候就是int型的数据

typedef int size;
size a=0;

(2)修饰变量

const extern signed unsigned static
auto volatile register
signed unsigned 可以改变变量的值为有符号/无符号
如unsigned int即为无符号整型
static可以修饰静态全局变量
比如局域变量在定义域结束之后应该被销毁
但是static可以防止销毁

#include <stdio.h>
void test()
{
    static int i = 0;
    i++;
    printf("%d ", i);
}
int main()
{
    int i = 0;
    for (i = 0; i < 10; i++)
    {
        test();
    }
    return 0;
}

上面的代码中,如果没有static修饰变量i
在test函数调用结束后,i变量就会被销毁,再次进入test函数,i又被初始化成0,最终打印的值永远是1.
加上了static之后,i就不会被销毁,重复运行static int i=0也不会让i被重新改成为0,就可以打印1~10的数了
相比较全局变量,它可以防止被其他文件所使用

同样static也可以修饰全局变量和函数,让变量和函数只能在所在文件使用,缩小使用范围。
extern引用外部变量
如果我在file2文件中定义了一个全局变量i想要在file1文件上使用,就需要在file2文件引用时用extern引用变量。

int main()//file1
{
	extern int num;
	printf("%d", num);
	return 0;
}

int num = 5;//file2

后面三个关键字auto volatile register
涉及到内存/进程相关,等到后面再讲。

(3)流程控制

break case continue default do else for goto if switch while return
这些关键字可以对代码进行跳转,循环,选择等操作,控制程序的运行。
其实sizeof即属于关键字,也属于操作符,在下面提及

2.运算符

c的运算符有很多种类,包括:

(1)算术运算符

即加减乘除和自加(++),自减(–)以及取模
要注意的是(1)取模运算符(%)两边的数只能是整数
除法(/)两边的数都是整数的话,进行整数除法如3/2商1余1,运算结果就是1。
如果两边的数有一个数是小数就进行小数除法,3.0/2的值为1.5

(2)关系运算符

!=, >, <, >=, <=
进行大小的判断,根据真假输出结果

(3)逻辑运算符

&& ,||, !
代表逻辑与,或,非

(4) 位运算符

& | ^
<< >> ~
即按位与 按位或 按位异或
按位取反,左移,右移
他们都是对储存在内存中的的补码进行操作的
其中按位与 按位或 按位异是对两个的二进制位比较的
比如说3和7
他们在内存中用补码来看
3=00000000000000000000000000000011
7=00000000000000000000000000000111
对两个数的同位进行比较
如果是按位与
两个数的同位有一个为0,则结果为0
对三十二位都进行比较,得到一个结果
在这里插入图片描述

这是3和7按位与的结果的二进制,转为十进制就是3
按位或则是
两个数的同位有一个为1,则结果为1
那么这是3和7按位或的结果就是
00000000000000000000000000000111,转换为十进制就是7
按位异或则是看两位是否相同
相同的话则为0,不同的话则为1
那么3和5按位异或的结果就是
00000000000000000000000000000100,转换为十进制就是4
按位取反(~)则是对二进制所有位按位取反
左移右移则是将二进制位进行移动,溢出的部分会被废除,而空缺的位置补上数字
左移补充的数字为0在这里插入图片描述

而右移则是在左侧补充符号位
如-2在这里插入图片描述

转换为补码为11111111111111111111111111111110
右移之后就为11111111111111111111111111111111

(5)赋值运算符

赋值的运算符为=
但是赋值运算符可以和其他运算符连用
比如a=a+1
可以写成a+=1

(6)杂项运算符

sizeof,(? : ),以及和地址有关的&和*
sizeof可以计算变量在内存中占用的内存大小(单位是字节)
也可以用于数组
比如定义一个数组arr[10]={0};
用sizeof(arr)的值就是4×10=40
&和*则是和地址有关
? :是三目运算符
格式为: 表达式1:表达式2?表达式3
表达式1值为真则执行表达式2
表达式1值为假则执行表达式3

点个赞呀
点个赞再走呀!

  • 11
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值