目录
5.逗号表达式
1.操作符的分类
算术操作符:+ ,-,*,/
移位操作符:>> <<
位操作符:& | ^
赋值操作符: = 、+= 、 -= 、 *= 、 /= 、%= 、>= 、&= 、|= 、^=
单⽬操作符: !、++、--、&、*、+、-、~
关系操作符: > 、>= 、< 、<= 、 == 、 !=
逻辑操作符: && 、||
条件操作符: ? :
2.二进制与计算
概念
首先我们需要弄清什么是进制,进制是一种用于计量和表示数值的方法。它基于一个基数,即基本数值单位,用来表示所有的数字。最常见的进制是十进制,即基于10的进制系统,使用0到9这10个数字来表示所有的数值,生活中常见的还有60进制,二进制,八进制,十六进制,而通过十进制,我们便可以知道,二进制是基于2的进制系统,使用0,1这两个数字来表示所有的数值,十进制是逢十进一,二进制我们类比可知是逢二进一
进制转换
要了解进制转换,我们需要先引入权,权重,权重值的概念,
-
权(digit weight):在十进制系统中,每一位数字的权是该数字乘以其所在位置的价值。例如,在数字123中,3的权是3(因为它在最右侧,表示个位),而2的权是20(因为它在十位,代表十个2),1的权是100(百位)。
-
权重(weight):权重是一个与数字在数制中的位置有关的值。在十进制和二进制等数制中,权重通常用作确定数位所代表的数值大小。例如,在二进制中,每一位的权重是2的幂次(从右到左,幂次从0开始递增)。
-
权重值(weight value):权重值是指一个数字在特定位置上所表示的具体数值。例如,在二进制数1101中,最右边的1的权重值是1,因为它的权重是2^0=1。
举例说明:二进制的1101
2进制的位 | 1 | 1 | 0 | 1 |
权重 | 2^3 | 2^2 | 2^1 | 2^0 |
权重值 | 8 | 4 | 2 | 1 |
那么我们便可以求出1101代表的十进制数字是1*8+1*4+0*2+1*1=13。这样,我们就可以完成二进制转换成十进制,那么如果我们需要完成十进制转换成二进制呢?
在这里我们使用除基取余的方法,比如说给定一个10进制数125
基数 | 除数 | 余数 |
2 | 125 | 1 |
2 | 62 | 0 |
2 | 31 | 1 |
2 | 15 | 1 |
2 | 7 | 1 |
2 | 3 | 1 |
2 | 1 | 1 |
0 |
我们从下往上依次读取,便可以知道125的二进制数为1111101。
原码反码补码
原码、反码和补码是计算机中用于表示有符号数字的不同方式。
- 原码:即将数字本身以二进制形式表示,最高位为符号位(0 表示正数,1 表示负数),其余位为数值部分。例如,数字 5 的原码为 0101。
- 反码:对于正数,反码与原码相同;对于负数,反码将原码的数值部分取反(0 变成 1,1 变成 0),但符号位保持不变。例如,数字 -5 的原码为 1101,其反码为 1010。
- 补码:对于正数,补码与原码相同;对于负数,补码是将该数的反码的最低位加 1。例如,数字 -5 的反码为 1010,其补码为 1011。
3.移位操作符
左移操作符
移位规则:左边抛弃,右边补0;
#include <stdio.h>
int main()
{
int a = 13;
int b = a << 1;
printf("%d\n", a);
printf("%d\n", b);
return 0;
}
13的二进制数是00000000000000001101,左移一位就是0000000000011010,转换成十进制数是26,
运行结果验证了我们的想法是正确的
右移操作符
移位规则:⾸先右移运算分两种:
1. 逻辑右移:左边⽤0填充,右边丢弃
2. 算术右移:左边⽤原该值的符号位填充,右边丢弃
对于绝大多数的编译器,都是采取的算术右移,还是13,右移之后是0110,就是6
4.位操作符
位操作符有
1.& 按位与
2.| 按位或
3.^ 按位异或
4.~ 按位取反
#include <stdio.h>
int main()
{
int a = 13;
int b = 5;
printf("%d\n", a & b);
printf("%d\n", a | b);
printf("%d\n", a ^ b);
printf("%d\n", ~8);
}
5.逗号表达式
逗号表达式,就是用逗号隔开的多个表达式,逗号表达式从左向右依次运行,结果为最后一个表达式的结果。上代码
#include <stdio.h>
int main()
{
int a = 13;
int b = 5;
int c = (a = a + 5, b = b + 10, a - b);
printf("%d\n", c);
}
首先执行a=a+5,得到a为18,然后执行b=b+10,得到b为15,最后执行a-b,得到3,赋给c的值即为a-b的结果