Clasificación de operadores
Operadores aritméticos Operadores de
desplazamiento Operadores de
bit Operadores de
asignación Operadores unarios
Operadores
relacionales Operadores
lógicos Operadores
condicionales
Expresiones de coma
1. Operadores aritméticos
+ - * / %
(1) % es el carácter de resto, es decir, el resto, los dos operandos deben ser números enteros y el retorno es el resto después de la división. Como
(10 dividido por 3, cociente 3 resto 1)
10/3=1;
10%3=1;
además del operador %, varios otros operadores pueden actuar sobre números enteros y de punto flotante. Para el operador /, la división de enteros se realiza si ambos operandos son enteros. Y siempre que haya números de punto flotante, se realiza la división de punto flotante.
2. Operador de turno (todas las operaciones son complemento)
<< 左移操作符
>> 右移操作符
注:移位操作符的操作数必须是整数,移动位数只能是正整数(不能为负数)。
如 3<<12(表示3左移12位)
3>>12(表示3右移12位)
(1) Desplazamiento a la izquierda (eliminar a la izquierda, completar con 0 a la derecha) Complemento de 3 ( inverso
, el complemento es el mismo )
-3 código original
100000000000000000000000000000011
Complemento de -3 (el bit de signo del código original permanece sin cambios, y el resto está invertido)
1111111111111111111111111111100
Complemento de -3 (complemento de uno + 1)
111111111111 11111111111111111101
-3<<12 (-3 desplazado a la izquierda 120 bits)
10111 101000110
Convertido al código inverso (es decir, -1)
11111111111111111100 111111111111
convertido al código original (el bit de signo permanece sin cambios, el resto se invierte)
10000000000000000011000000000000
El código original es el resultado final
(2) Desplazamiento a la derecha
(2).1 Desplazamiento lógico a la derecha (completar 0 a la izquierda, descartar el extra a la derecha)
como 15>>3
15的原码(反码、补码都一样)
000000000000000000000000000001111
15>>3
00000000000000000000000000001000
Como -15>>3
-15的原码
10000000000000000000000000001111
-15的反码
11111111111111111111111111110000
-15的补码
11111111111111111111111111110001
-15>>3
00011111111111111111111111111110
(2).2 Desplazamiento aritmético a la derecha (llene el bit más alto a la izquierda, descarte a la derecha)
como 8>>3
8的原码
00000000000000000000000000001000
8>>3
00000000000000000000000000000001
Como -16>>3
-16的原码
10000000000000000000000000010000
-16的反码
11111111111111111111111111101111
-16的补码
11111111111111111111111111110000
-16>>3
11111111111111111111111111111110
3. Operadores de bits (se realizan operaciones complementarias)
& 按位与(两个都是1则结果为1,否则为0)
| 按位或(至少有一个1则结果为1)
^ 按位异或(相同为0,不同为1)
注:他们的操作数必须是整数。
Tome el binario de 8 bits como ejemplo
3 y 5
00000011 (3)
00000101 (5)
00000001 (3&5)
3|5
00000011 (3)
00000101 (5)
00000111 (3|5)
3^5
00000011 (3)
00000101 (5)
00000110 (3^5)
4. Operador de asignación (=)
int a = 10;
int x = 0;
int y = 20; a = x = y+1;//连续赋值
operador de asignación compuesto
+= 如a=a+b 可以写成 a+=b
-= a=a-b a-=b;
*= a=a*b a*=b;
/= ... ...
%= ... ...
>>=
<<=
&=
|=
^=
这些运算符道理都一样
5. Operador unario
! 逻辑反操作
- 负值
+ 正值
& 取地址
sizeof 操作数的类型长度(以字节为单位)
~ 对一个数的二进制按位取反
-- 前置、后置--
++ 前置、后置++
* 间接访问操作符(解引用操作符) (类型) 强制类型转换
!La operación inversa lógica
0 se convierte en no-0, no-0 se convierte en 0
例如 a=3,b=0;
则 !a=0,!b=1(或其他非0数)
Prefijo ++ y prefijo - - (primero ++ o - -, luego operación)
int main()
{
int a = 10;
int x = ++a;
//先对a进行自增,然后对使用a,也就是表达式的值是a自增之后的值。x为11。
int y = --a;
//先对a进行自减,然后对使用a,也就是表达式的值是a自减之后的值。y为10;
return 0;
}
Postfix ++ y postfix - - (operar primero y luego ++ o - -)
#include <stdio.h>
int main()
{
int a = 10;
int x = a++;
//先对a先使用,再增加,这样x的值是10;之后a变成11;
int y = a--;
//先对a先使用,再自减,这样y的值是11;之后a变成10;
return 0;
}
6. Operadores relacionales
>
>=
<
<=
!= 用于测试“不相等”
== 用于测试“相等”
7. Operadores Lógicos
&& Lógico Y
|| Lógico O
&& AND lógico: Concatena dos expresiones en una. Ambas expresiones deben ser verdaderas para que la expresión completa sea verdadera
como en
1&&3 --->1
1&&0 --->0
|| OR lógico
Une dos expresiones en una. Una o ambas expresiones deben ser verdaderas para que la expresión completa sea verdadera. Mientras uno de ellos sea verdadero, el otro se vuelve irrelevante
como en
1||1 -->1
1||0 -->1
8. Operador condicional
exp1 ?exp2 : exp3
como encontrar el valor máximo de dos números
if(a>b)
return a;
else
return b;
reemplazar con expresión condicional
(a>b)?a:b
//判断(a>b)是否成立,如果成立返回a的值,否则返回b的值
9. Expresiones con coma
exp1, exp2, exp3, …expN Las expresiones con
coma son expresiones múltiples separadas por comas.
Expresiones de coma, ejecutadas en orden de izquierda a derecha. El resultado de toda la expresión es el resultado de la última expresión.
int a = 1;
int b = 2;
int c=(a=a*b, a=b+10, a, b=a+1);
a=1*2=2, a=2+10=12,12,b=12+1=13
所以结果为13