C语言概括(操作符)

C语言概括(操作符)

一. 算数运算符

(1) % 在C语言中只能对整数进行运算;
(2) / 参与运算的量均为整型时,结果为整型舍去小数部分,如果运算时有一个是浮点型,结果为双精度浮点型;
注: 当除数为0时,就会出现运行错误,但是编译器会尽可能作出检查,如果编译器能够检查出来/0,那就是编译器报错,如果检查不出来,就运行时报错(如果除数是常量,能检查出来,除数是变量,编译器无能为力);这个问题还有一个更好的回答:计算是基于CPU,CPU执行到当前这个除以0的指令的时候,就会产生一个中断,此时操作系统就会检测到这个中断,就会给对应的进程发送一个信号,导致这个进程异常终止.

二. 类型转换

(1)隐式类型转换
关于隐式类型转换,主要有两种场景会触发:
1.不同类型的变量相互赋值的
eg:把short赋值给int,多出的两个字节,要填符号位;
把int赋值给short,少的两个直接被舍弃(风险高);
2.不同类型变量混合运算
此处的转换规则和上面的类似,拿short和int缓和运算时,short转为int
3.还有一种隐式类型转换的特殊类型"整型提升"
例:
short a = 10;
short b = 20;
short c = a + b;
这个代码看起来都是相同类型,不应该发生隐式类型转换的,但实际上并不是的,实际上这个代码会产生隐式类型转换,在计算a+b的时候先把a和b都隐式转成int,相加得到了还是一个int在赋值给short,再转一次(为了使硬件更方便)
整型提升对于short和char这种比int短的都会产生.
(2)强制类型转换(显式类型转换)
和隐式类型转换有类似的规则
把short赋值给int,多出的两个字节,要填符号位;
把int赋值给short,少的两个直接被舍弃(风险高);
注:如果这个语言越支持隐式类型转换,称为类型越弱;如果这个语言越不支持隐式类型转换,称为类型越强;整体结论:强类型好于弱类型,静态类型好于动态类型.
long double
double
float
unsigned long int
long int(int)
unsigned int
int
是从下往上进行转换的

三.移位操作符

移位操作符是针对二进制进行运算的;
(1)左移运算 <<:
左移一位,最高位不要了,最低位补0,每次左移一位,相当于*2;
(2)右移运算 >>:

  1. 算术右移:最低位不要了,整体右移一位,最高位补符号位,相当于/2;
  2. 逻辑右移:最低位不要了,整体右移一位,最高位补0(C语言中不支持);
    注:在计算机中表示一个整数的正负,拿最高位作为符号位,如果符号位为0表示正数,如果符号位为1,表示负数;
四. 位操作符

(1)按位与 & :
把两个操作数对应位进行运算,如果两位都是1,结果为1,否则为0;
(2)按位或 | :
把两个操作数对应位进行运算,如果两个位都是0,结果为0,否则为1;
(3)按位异或 ^ :
把两个操作数对应位进行运算,如果两个位是相同的值,结果为0,否则为1;
异或还有一个重要特性:a ^ 0 = a,a ^ a = 0, a ^ b ^ a = b;
(4)按位取反 ~:
针对一个操作数,来计算的,针对每一位0变为1,1变为0;
eg :交换两个数的三种方法:

//1.有临时变量
int tmp = a;
a = b;
b = tmp;
//2.没有临时变量(借助加减运算完成)
a = a + b;
b = a - b;
a = a - b;
//没有临时变量(借助异或完成)
a = a ^ b;
b = a ^ b;
a = a ^ b;
五. 赋值和初始化
  1. 赋值:变量已经有了,进行修改;
  2. 初始化:创建变量,设置一个值;
六. 单目运算符
  1. !
    这是把当前操作数先当成真假值,在进行运算.(非0为真,0为假)
    如果操作数为非0的值,! 之后统一变成0;
    如果操作数为0,! 之后统一为1;
  2. sizeof
    sizeof不是一个函数,它不光能求变量字节,还能求类型字节数;
    sizeof是在编译期求值
    eg :
    int a[4] = {1, 2, 3, 4}
    printf("%d\n",sizeof(a[100]));
    这个里面的a[100]并不会运行错误,因为所谓的数组下标越界是发生在程序运行时的事情,本质上是访问了非法内存,但sizeof是编译期求值,所以运行时不会报错,实际上就是printf("%d\n",4);
七. 三目运算符

a > b ? a : b (优先级最低)
条件成立时就返回a;
条件不成立时就返回b;

八. 下标访问操作和函数调用操作符
  1. [ ]下标访问操作
    在C语言中,数组和指针都能进行[ ]操作
    对于数组来说,[ ]的有效下标范围[0,length-1],如果下标越界,就会出现未定义行为;
    对于指针来说,[ ]的有效下标范围就不好说了;
  2. ( )函数调用操作符
    如果调用函数的时候没加( ),就叫做函数指针;
    函数指针:指针是一个变量,里面存了个整数,是一个内存地址
九. 编译和运行
  1. 编译: 把.c文件变成二进制的.exe 文件
    .exe文件里就包含了CPU运行时要执行的指令,以及依赖的数据,原来在.c文件中写的函数,就被转换成二进制的机器指令就存放到这个exe文件中(机器语言)
  2. 运行:双击exe文件,让系统进行执行
    双击exe文件就涉及到操作系统的工作了,操作系统就需要读取这个exe文件中的一些指令和数据,先把这些内容加载到内存中,然后再交给CPU一条一条的执行(这个过程叫做模块加载进程);
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值