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 << 1dá 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 >> 1dá 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 & 1010dá como resultado1000.
- Por exemplo, a nivel binario,
- Suma lóxica, «
|».- Por exemplo, a nivel binario,
1100 | 1010dá como resultado1110.
- Por exemplo, a nivel binario,
- Suma lóxica exclusiva, «
^».- Por exemplo, a nivel binario,
1100 ^ 1010dá 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á1se o valor das dúas expresións entre as que está é certo ─distinto de cero─, e0en caso contrario. - Ou, «
||», devolverá1se o valor de algunha das dúas expresións entre as que está é certo ─distinto de cero─, e0en 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 → |