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 punteiroexpresió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:

  1. Multiplicación, división e resto.
  2. 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.

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.

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.

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 resultado 11000.

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 resultado 110.

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 resultado 1000.
  • Suma lóxica, «|».
    Por exemplo, a nivel binario, 1100 | 1010 dá como resultado 1110.
  • Suma lóxica exclusiva, «^».
    Por exemplo, a nivel binario, 1100 ^ 1010 dá como resultado 0110.

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─, e 0 en caso contrario.
  • Ou, «||», devolverá 1 se o valor de algunha das dúas expresións entre as que está é certo ─distinto de cero─, e 0 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.

  1. Non confundir con =, o símbolo de asignación de valores ás variables.

Véxase tamén

editar

Outros capítulos

editar


C
← Volver a Tamaño Operadores Seguir con Instrucións de control