C/Operadores
C | ||
← Volver a Tamaño | Operadores | Seguir con Instrucións de control → |
A linguaxe de programación C conta con expresións (operadores, operandos ou conxuntos dos mesmos) de todo tipo. A continuacións lístanse todas estas expresións, agrupadas segundo a prioridade que se lles dá á hora de traballar. Cómpre salientar ademais que, ante dúas expresións coa mesma prioridade, o cálculo efectúase de esquerda a dereita.
Expresións de primeiro nivel
[editar]Identificador
[editar]Sempre que se declarase previamente designando unha variable ou unha función, un identificador será unha expresión de primeiro nivel.
Constante literal
[editar]As constantes literais son expresións de primeiro nivel.
Cadea de caracteres
[editar]As cadeas de caracteres son expresións de primeiro nivel.
Parénteses
[editar]Unha expresión entre parénteses é unha expresión de primeiro nivel. É dicir, os parénteses utilízanse para converter en expresións de primeiro nivel aquelas que conteñen, dándolles así prioridade sobre outras expresións.
Os seus símbolos son de sobra coñecidos: «(
» é o paréntese inicial e «)
» o final.
Expresións de segundo nivel
[editar]Son expresións de segundo nivel o conxunto das expresións de primeiro nivel e as seguintes:
Delimitador dunha matriz
[editar]Un delimitador dunha matriz é unha expresión formada por: unha expresión de segundo nivel seguida doutra expresión entre corchetes («[
» e «]
»). A primeira expresión será dun tipo “apuntador” ─unha matriz ou un punteiro─, e a segunda de tipo enteiro. O resultado será do tipo ao que apuntase a expresión de tipo “apuntador”.
Un delimitador dunha matriz fai referencia a un elemento de dita matriz, e nos casos en que haxa delimitadores de matriz sucesivos (como por exemplo: identificador[3][7]
) estaremos falando de matrices de varias dimensións.
Chamada a unha función
[editar]Unha chamada a unha función é unha expresión de segundo nivel seguida de parénteses que poden conter ou non unha lista de argumentos.
Elemento dunha agrupación
[editar]Un elemento dunha agrupación ─unha estrutura ou unha unión─ sinálase mediante unha expresión de segundo nivel ─que se corresponde cunha agrupación─ seguida dun punto, «.
», e este seguido dun identificador ─o identificador do elemento da agrupación─. Se a expresión de segundo nivel é un punteiro a unha agrupación en vez dunha agrupación directamente, o punto substituirase por unha “frecha”: «->
».
Incremento e redución
[editar]Un incremento ou redución é o que se coñece como unha “sentencia operativa”. É de segundo nivel cando está formado por unha expresión de segundo nivel ─unha variable─ seguida dun operador de incremento, «++
», ou un de redución, «--
». Se o operador está antes da expresión en vez de despois, xa se trataría o conxunto dunha expresión de terceiro nivel.
Este tipo de expresión conforma de por si unha sentencia, é dicir, non tería sentido mesturar un incremento ou redución con outros operadores nunha sentencia, porque forman xa de por si unha sentencia.
Este tipo de expresión de segundo nivel implica que a expresión de segundo nivel orixinal verá o seu valor modificado. Segundo se utilice o operador de incremento ou o de redución, esta modificación será un aumento ou unha diminución nunha unidade do valor orixinal, respectivamente.
E segundo a posición do operador con respecto da expresión de segundo nivel ─diante ou detrás─, será distinto o valor da expresión de segundo nivel resultante. Se o operador está antes da expresión de segundo nivel, a expresión resultante da combinación do operador e a expresión de segundo nivel terá por valor o desta última incrementado ou reducido nunha unidade. Porén, se o operador está despois da expresión de segundo nivel, o valor desta ─sen cambios─ será o valor da expresión resultante (por exemplo, o valor de a
é o mesmo que o de a++
), e o cambio aplicarase despois de utilizar a expresión.
A mellor forma de entendelo é mediante un exemplo práctico:
// Estas tres expresións teñen para «a» o mesmo resultado:
a = a + 1;
a++
++a
// Porén, as seguintes expresións non significan o mesmo para «b»:
b = a++ // Incremento posterior, equivale a: b = a; a = a + 1;
b = ++a // Incremento previo, equivale a: a = a + 1; b = a;
Téñase en conta que estas expresións non melloran o rendemento do programa, son simplemente formas alternativas de expresar unha operación ou serie de operacións. É dicir, en lugar de usar as expresións de incremento e redución pode perfectamente usarse unha equivalencia ─como as dos comentarios do exemplo anterior─.
Algunhas persoas poden considerar estas expresións complicadas de entender (habitual cando se está comezando a aprendizaxe da linguaxe), e usar outras sentencias equivalentes. Así e todo, úsense ou non estas formas, cómpre coñecelas para entendelas en caso de ler códigos alleos que as conteñan.
Incremento e redución nunha instrución while
[editar]Cómpre asemade saber que expresar da seguinte forma un ciclo while
:
while(variable[indice++]);
equivale a estoura expresión dun ciclo for
:
for(i=0;variable[indice];indice++);
Expresións de terceiro nivel
[editar]Son expresións de terceiro nivel o conxunto das expresións de segundo nivel e as seguintes:
Incremento e redución
[editar]Son de terceiro nivel cando o operador vai despois, como xa se explicou antes. Remítase alí para entender en que consisten ou o seu funcionamento.
Enderezo
[editar]O operador de enderezo, se se sitúa diante dunha variable calquera ─expresión de cuarto nivel─, indica que se traballa co enderezo de memoria en que esta se garda en lugar de traballar co seu valor.
O seu símbolo é: «&
».
Apuntado
[editar]O operador de apuntado, precedendo a un punteiro ─expresión de cuarto nivel─, indica que se traballa co contido do espazo de memoria ao que apunta, e non co contido do punteiro. É dicir, traballarase co valor da variable á que apunta o punteiro en vez de co valor do punteiro.
O seu símbolo é o asterisco: «*
».
Complemento a dous
[editar]O complemento a dous é o que popularmente se coñece como “negación”. Para saber en que consiste, búsquese un libro de matemáticas fundamentais.
O seu símbolo é o guión curto, «-
», e colócase precedendo un valor ou unha variable ─expresión de cuarto nivel─.
Signo positivo
[editar]O signo positivo é un operador que non cambia nada.
O seu símbolo é «+
», e colócase precedendo un valor ou unha variable ─expresión de cuarto nivel─.
Negación lóxica
[editar]O seu símbolo é un peche de exclamación, «!
», e colócase precedendo un valor ou unha variable ─expresión de cuarto nivel─. Equivale a unha equiparación lóxica do valor ao que precede a cero.
Por exemplo, (!variable)
é o mesmo que (0==variable)
.
Complemento a un
[editar]Por non estenderse de máis na explicación de que consiste, trátase dunha inversión a nivel binario dos números. Por exemplo, o complemento a dous de 10011100
sería 01100011
.
O seu símbolo é un til como o do ñ, «~
», e colócase precedendo un valor ou unha variable ─expresión de cuarto nivel─.
sizeof
[editar]Aínda que parece unha función, sizeof()
é un operador de C. Este operador permite coñecer a cantidade de bytes que ocupa en memoria unha expresión de terceiro nivel ou un tipo de dato, indicados entre os seus parénteses. En ambos casos, a expresión resultante será de terceiro nivel.
A súa sintaxe é a seguinte:
sizeof variable;
sizeof(tipo);
O operador devolve o valor da cantidade de bytes co tipo size_t
─definido no ficheiro de cabeceira stddef.h
─, que so admite valores positivos (números naturais).
Expresións de cuarto nivel
[editar]Son expresións de cuarto nivel o conxunto das expresións de terceiro nivel e as seguintes:
Moldes
[editar]Os moldes seguidos de expresións de cuarto nivel son en conxunto expresións de cuarto nivel.
Operadores aritméticos
[editar]Á hora de realizar operacións aritméticas, hai que ter en conta dúas cousas: (1) a orde de prioridade dos operadores, que é similar á das matemáticas, e (2) o tipo de dato dos valores que forman parte das expresións aritméticas.
A continuación lístanse os operadores aritméticos segundo a súa prioridade, sendo prioritarios os primeiros sobre os que lles seguen:
- Multiplicación, división e resto.
- Suma e resta.
Multiplicación
[editar]Para saber en que consiste a multiplicación, búsquese un libro de matemáticas fundamentais.
O seu símbolo é o asterisco, «*
», e colócase entre dous valores ou variables para calcular o seu produto.
División
[editar]Para saber en que consiste a división, búsquese un libro de matemáticas fundamentais.
O seu símbolo é a barra inclinada, «/
», que se sitúa entre dous valores ou variables a dividir, sendo o primeiro valor o dividendo e o segundo o divisor.
Resto
[editar]O resto é a cantidade que sobra ao realizar unha división entre dous números enteiros.
O seu símbolo é o de porcentaxe, «%
», e sitúase entre dous valores para saber cal sería o resto froito da súa división.
Non fai falla que tanto dividendo coma divisor sexan números enteiros, pero é necesario que polo menos un dos dous o sexa, dado que os números reais non teñen resto.
Ao traballar co resto hai que ter coidado, xa que non actúa exactamente como se podería esperar en Matemáticas. Por exemplo: (-5) % 2 = -1
(non 1
como podería esperarse). O resto das divisións de enteiros é un enteiro, e o das divisións de enteiros negativos entre enteiros positivos redondea cara o cero en vez de redondear cara abaixo. Para que se comprenda, nada como outro exemplo: (-5) % 3 = -1
(non -2
, como podería esperarse).
Este operador resulta moi útil ao traballar con instrucións de control. Permite, por exemplo, comprobar nunha división se o dividendo é un múltiplo do divisor.
Suma
[editar]Para saber en que consiste a suma, búsquese un libro de matemáticas fundamentais.
O seu símbolo é «+
», e colócase entre dous valores ou variables para sumar ambos os dous valores.
Resta
[editar]Para saber en que consiste a resta, búsquese un libro de matemáticas fundamentais.
O seu símbolo é o guión curto, «-
», e colócase entre dous valores ou variables para restarlle o segundo valor ao primeiro.
Desprazamento
[editar]Desprazamento á esquerda
[editar]O operador «<<
» despraza a representación binaria cara a esquerda, tirando cos bits máis significativos e engadindo bits de valor 0
ao final. O resultado equivale a multiplicar o enteiro por unha potencia de dous.
- Por exemplo, a nivel binario,
1100 << 1
dá como resultado11000
.
Desprazamento á dereita
[editar]O operador de desprazamento á dereita, «>>
», actúa de forma distinta segundo o tipo de dato co que traballe, segundo este sexa natural (só valores positivos) ou enteiro (valores positivos e negativos).
O operador de desprazamento á dereita para valores naturais é o que ás veces se coñece coma desprazamento lóxico á dereita. Despraza a representación binaria á dereita, tirando cos bits menos significativos e engadindo bits de valor 0
ao principio. O resultado é equivalente a dividir por unha potencia de dous no caso dos números naturais.
- Por exemplo, a nivel binario,
1100 >> 1
dá como resultado110
.
O operador de desprazamento á dereita para valores enteiros é o que ás veces se coñece coma desprazamento aritmético á dereita. Despraza a representación binaria á dereita, tirando cos bits menos significativos, pero engadindo bits ao principio co mesmo valor do bit de signo orixinal. O resultado é equivalente a dividir por unha potencia de dous no caso dos números naturais.
Operadores de comparación
[editar]Entre dúas expresión, devolven 1
cando se cumpre a expresión e 0
cando non. Son os seguintes:
- Maior que, «
>
». - Menor que, «
<
». - Maior ou igual que, «
>=
». - Menor ou igual que, «
<=
».
Operadores de igualdade
[editar]Funcionan do mesmo xeito que os operadores anteriores, coa diferencia de que teñen menos prioridade de execución. Son os seguintes:
- Igual que, «
==
»[1]. - Distinto de, «
!=
».
Operadores a nivel de bit
[editar]Para comprender o seu significado, cómpre botarlle unha ollada ao capítulo ao respecto do libro de Sistemas informáticos multiusuario e en rede. Son os seguintes:
- Produto lóxico, «
&
».- Por exemplo, a nivel binario,
1100 & 1010
dá como resultado1000
.
- Por exemplo, a nivel binario,
- Suma lóxica, «
|
».- Por exemplo, a nivel binario,
1100 | 1010
dá como resultado1110
.
- Por exemplo, a nivel binario,
- Suma lóxica exclusiva, «
^
».- Por exemplo, a nivel binario,
1100 ^ 1010
dá como resultado0110
.
- Por exemplo, a nivel binario,
Entre eles a prioridade é distinta, seguindo a orde en que están listados (con maior preferencia o que está máis arriba na lista).
Operadores lóxicos
[editar]Son os seguintes:
- E, «
&&
», devolverá1
se o valor das dúas expresións entre as que está é certo ─distinto de cero─, e0
en caso contrario. - Ou, «
||
», devolverá1
se o valor de algunha das dúas expresións entre as que está é certo ─distinto de cero─, e0
en caso contrario.
Cómpre comentar que nos casos en que unha das partes xa converte en certa unha expresión lóxica, o sistema actúa de maneira eficiente e ignora o resto da expresión. Hai que ter ollo, pois nalgúns casos pode resultar problemático.
Operadores condicionais
[editar]O operador de tres operandos ?:
é o operador condicional. Nada como un exemplo para comprendelo: (x ? y : z)
ten o valor de y
se o valor de x
é distinto de 0
, ou o valor de z
en caso contrario.
Operadores de asignación
[editar]Existen uns operadores de asignación que combinan o operador de asignación, «=
», con algún operador dos que xa se viron neste capítulo. Todos seguen o mesmo patrón: x op= y
equivale a x = x op y
, onde op
é o operando. Son os seguintes:
*=
/=
%=
+=
-=
<<=
>>=
&=
^=
|=
A coma
[editar]A coma, «,
», pode actuar como operador, e é de todos o que ten unha menor prioridade. Cando unha coma separa expresións, avalíanse todas as expresións, e o valor que conta é o valor da última delas. Por exemplo, o valor da expresión x , y
sería o de y
, se ben se avaliaría tamén x
.
Este operador adoita utilizarse de maneira exclusiva na primeira e terceira parte dos parénteses do ciclo for
. E non debe confundirse coas comas utilizadas nos argumentos das chamadas ás funcións, pois estas teñen só a función de servir como separadores dos argumentos.
Notas
[editar]- ↑ Non confundir con
=
, o símbolo de asignación de valores ás variables.
Véxase tamén
[editar]Outros capítulos
[editar]- Algunhas operacións teñen un comportamento distinto cos punteiros.
C | ||
← Volver a Tamaño | Operadores | Seguir con Instrucións de control → |