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
editarIdentificador
editarSempre que se declarase previamente designando unha variable ou unha función, un identificador será unha expresión de primeiro nivel.
Constante literal
editarAs constantes literais son expresións de primeiro nivel.
Cadea de caracteres
editarAs cadeas de caracteres son expresións de primeiro nivel.
Parénteses
editarUnha 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
editarSon expresións de segundo nivel o conxunto das expresións de primeiro nivel e as seguintes:
Delimitador dunha matriz
editarUn 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
editarUnha 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
editarUn 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
editarUn 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
editarSon expresións de terceiro nivel o conxunto das expresións de segundo nivel e as seguintes:
Incremento e redución
editarSon 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
editarO 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
editarO 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
editarO 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
editarO 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
editarO 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
editarPor 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
editarSon expresións de cuarto nivel o conxunto das expresións de terceiro nivel e as seguintes:
Moldes
editarOs 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
editarPara 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
editarPara 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
editarO 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
editarPara 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
editarPara 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
editarDesprazamento á esquerda
editarO 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
editarO 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
editarEntre 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
editarFuncionan 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
editarPara 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
editarSon 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
editarO 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
editarExisten 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
editarA 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
editarOutros 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 → |