一、操作符
1.算术操作符
+ | 加法 |
- | 减法 |
* | 乘法 |
/ | 除法 |
% | 取模/取余,得余数 |
2.移位运算符
<< | 左移操作符 |
>> | 右移操作符 |
移位操作符移动的是二进制位数
一个int占用的内存为4字节,故a的值表示为:
00000000 00000000 00000000 00000010
a向左移动一位,后面自动添0,
00000000 00000000 00000000 00000100
然后把得到的二进制转化为十进制,即为4
3.位操作符
& | 按位与 |
| | 按位或 |
^ | 按位异或 |
4.赋值操作符
= += -= *= &= ^= |= >>= <<=
5.单目操作符
下面是关于~操作符
的代码(这里涉及到原码、反码、补码的知识)
int main() { //0的二进制值为00000000 00000000 00000000 00000000 //~是按位取反所以结果为11111111 11111111 11111111 11111111 //一个整数在内存中存储的是补码 //-1的原码为10000000 00000000 00000000 00000001,其中第一位表示正负号,0正1负 //反码是对原码取反,得11111111 11111111 11111111 11111110,符号位不变 //补码是对反码加一,得11111111 11111111 11111111 11111111 //正整数的原反补相同 int a = 0; printf("~a的值是:%d\n", ~a); return 0; }
6.关系操作符
> | 大于 |
>= | 大于等于 |
< | 小于 |
<= | 小于等于 |
int main() { //条件运算符 int a = 1; int b = 3; int MAX = a>b ? a : b; printf("MAX:%d\n", MAX); return 0; }
9.逗号表达式
逗号表达式,逗号隔开一串表达式,逗号表达式是从左向右一次计算的、整个表达式的结果是最后一个表达式的结果。
exp1, exp2, epx3, ...expN
10.下标引用和函数调用
[ ] | 下标引用操作符(常见于数组) |
() | 函数调用操作符,调用函数时,函数名后边的()就是函数调用操作符 |
二、原码、反码、补码
在计算机内,有符号数有三种表示方式:原码、反码和补码1
原码、反码、补码都是二进制的,第一位数用来表示正负,0表示这是一个正数,1表示这是一个负数,之后的数用来表示这个数的大小。通常以8的倍数为一组,因为1B(字节)=8(bit)位
,一位就代表一个二进制数。举个例子:
7 | -7 | |
原码 | 0000 0111 | 1000 0111 |
反码 | 0000 0111 | 1111 1000 |
补码 | 0000 0111 | 1111 1001 |
正数的原码、反码、补码是一样的;
负数的反码就是原码除符号位外全部取反,补码就是在得出来的反码基础上+1。
操作符详解:【学习笔记之菜Dog学C】详解操作符
- 又有个说法是,计算机内只补码,没有原码和反码。具体我没有查,我推测应该是原码、反码有弊端被淘汰了。 ↩︎