OPERADORES ORIENTADOS AL BIT
Actúan sobre bits y sólo tienen validez en tipos char, int, long int del C. No pueden por tanto aplicarse a los tipos float, double, long double, void o u otros tipos complejos.
El operador & (AND)
Su tabla de verdad se da a continuación:
OperadorAND
p
|
q
|
p & q
|
0
|
0
|
0
|
0
|
1
|
0
|
1
|
0
|
0
|
1
|
1
|
1
|
-
#include <stdio.h>
void main() {
-
int p,q;
p=047; /* octal: 047 -> binario: 0 000 000 000 100 111 */
q=025; /* octal: 025 -> binario: 0 000 000 000 010 101 */
printf("\n %03o(oct) & %03o(oct) = %03o(oct)",p,q,p&q);
printf("\n %03d(dec) & %03d(dec) = %03d(dec)",p,q,p&q);
/* visualiza:
047(oct) & 025(oct) = 005(oct)
039(dec) & 021(dec) = 005(dec)
*/ }
El operador| (OR)
Su tabla de verdad se da a continuación:
operador OR
p
|
p
|
p | q
|
0
|
0
|
0
|
0
|
1
|
1
|
1
|
0
|
1
|
1
|
1
|
1
|
-
#include <stdio.h>
void main() {
-
int p,q;
p=047; /* octal: 047 -> binario: 0 000 000 000 100 111 */
q=025; /* octal: 025 -> binario: 0 000 000 000 010 101 */
printf("\n %03o(oct) | %03o(oct) = %03o(oct)",p,q,p | q);
printf("\n %03d(dec) | %03d(dec) = %03d(dec)",p,q,p | q);
/* visualiza:
047(oct) | 025(oct) = 067(oct)
039(dec) | 021(dec) = 055(dec)
*/ }
El operador ^ (XOR)
Su tabla de verdad se da a continuación:
operador OR
p
|
p
|
p ^ q
|
0
|
0
|
0
|
0
|
1
|
1
|
1
|
0
|
1
|
1
|
1
|
0
|
-
#include <stdio.h>
void main() {
-
int p,q;
p=047; /* octal: 047 -> binario: 0 000 000 000 100 111 */
q=025; /* octal: 025 -> binario: 0 000 000 000 010 101 */
printf("\n %03o(oct) ^ %03o(oct) = %03o(oct)",p,q,p ^ q);
printf("\n %03d(dec) ^ %03d(dec) = %03d(dec)",p,q,p ^ q);
/* visualiza:
047(oct) ^ 025(oct) = 022(oct)
039(dec) ^ 021(dec) = 018(dec)
*/ }
El operador ~ (NOT)
Su tabla de verdad se da a continuación:
operador NOT
p
|
~p
|
0
|
1
|
1
|
0
|
-
#include <stdio.h>
void main() {
-
int p;
p=047; /* octal: 047 -> binario: 0 000 000 000 100 111 */
printf("\n ~%06o(oct) = %06o(oct)",p,~p);
printf("\n ~%06d(dec) = %06d(d)",p,~p);
/* visualiza:
~000047(oct) = 177730(oct)
~000039(dec) = -00033(dec)
*/ }
El operador >> (corrimiento a la derecha)
Traslada todos los bits tantos lugares a la derecha como indique el segundo operando.
-
#include <stdio.h>
void main() {
-
int p;
p=047; /* octal: 047 -> binario: 0 000 000 000 100 111 */
printf("\n %03o(oct)>>1 = %03o(oct)",p,p>>1);
printf("\n ~%03d(dec)>>1 = %03d(d)",p,p>>1);
/* visualiza:
047(oct)>>1 = 023(oct)
039(dec)>>1 = 19(dec)
*/ }
El operador << (corrimiento a la izquierda)
Traslada todos los bits tantos lugares a la izquierda como indique el segundo operando.
-
#include <stdio.h>
void main() {
-
int p;
p=047; /* octal: 047 -> binario: 0 000 000 000 100 111 */
printf("\n %03o(oct)<<1 = %03o(oct)",p,p<<1);
printf("\n ~%03d(dec)<<1 = %03d(d)",p,p<<1);
/* visualiza:
047(oct)<<1 = 116(oct)
039(dec)<<1 = 78(dec)
*/ }
EL OPERADOR ?
El operador ? permite sustituir la instrucción if/else cuya sintaxis es:
-
if(expresion) expresion1;
else expresion2;
Es indispensable que el contenido de if y de else sea un instrucción única.
x=expresion ? expresion1:expresion2
Nótese la posición de los dos puntos. Si expresion es distinta de cero (verdadera) el valor de expresion1 se le asigna a la variable x.Si expresion es igual a cero (falsa) el valor de expresion2 se le asigna a la variable x.
-
#include <stdio.h>
void main() {
-
int x=10, y=12; max;
max = x>y ? x : y;
printf("\n Il maximo de %d y %d de %d",x,y,max); }
EL OPERADOR COMA
Permite concatenar varias expresiones. El operando de la izquierda es siempre evaluado como void. Esto significa que a la expresión de la derecha se le asigna el valor de la última expresión después de la coma. En la instrucción que sigue:
x=(y=3,y+1);
Se le asigna a y el valor 3 y a la x el valor 4 (y+1). Los paréntesis son necesarios por que el operador de asignación tiene prioridad sobre el de coma.
LOS PARENTESIS CUADRADOS Y REDONDOS
En C los paréntesis cuadrados y redondos son considerados operadores. Los paréntesis redondos aumentan el nivel de precedencia de las operaciones que delimitan. Los paréntesis cuadrados en cambio asignan índices a los vectores. Es interesante notar que no todos los lenguajes de programación tienen la particularidad de considerar los paréntesis como operadores.