Hola y bienvenido.
En esta conferencia, quiero hablar sobre un par de operadores que son un poco extraños en el
sentido de que no necesariamente pensarías que son operadores.
Porque todos los operadores que aprendimos hasta este punto en realidad solo apuntan a que sabes
cómo usar el símbolo para hacer cálculos con números.
Y estos operadores en realidad parecen funciones.
Así que hablemos del reparto en el tamaño del operador.
Para hablar primero sobre el operador de transmisión, debo
contarles un poco sobre las conversiones de tipos, cómo se convierten los datos.
Aprendimos todo sobre los tipos de datos y los diferentes tipos de datos que existen.
Pero si realmente está tratando de asignar datos a diferentes tipos, hay
algunas conversiones implícitas que ocurren en el lenguaje de programación c.
Por lo tanto, la conversión de datos entre diferentes tipos puede ocurrir automáticamente
y esto se conoce como conversión implícita
por el lenguaje o explícitamente por el programa por el programa o.
El programador mismo, el desarrollador, puede hacer algo.
Pueden usar un operador de conversión esencialmente para hacer una conversión.
Los datos que se convierten implícitamente son realmente
importantes porque debe comprender esto porque la mayoría de los programas
en c que va a desarrollar para desarrollarlos de manera efectiva, debe
comprender estas reglas para estas conversiones.
Porque a menudo tendrás números enteros y de coma flotante,
números decimales y números enteros.
Y los usará mezclándolos un poco a veces.
Y cuando lo haga, debe saber cómo se están convirtiendo las cosas.
Ahora deberías intentar evitar eso tanto como puedas usando el operador de conversión.
Pero cuando no use el operador de transmisión, comprenda lo que está sucediendo.
Y lo que sucede aquí cuando asigna datos a diferentes
tipos flotantes y dobles,
los datos se truncarán o se promoverán.
Estos son dos términos que vas a escuchar.
Los medios truncados se vuelven menos precisos
y los medios promocionados se vuelven más precisos.
Intente no mezclar estos tipos, pero pueden resultar útiles.
Lo principal que hay que entender es que, gracias a conferencias anteriores, sabemos que c es muy flexible.
Y esa es una decisión consciente de los diseñadores del lenguaje.
Cuando quisieron que fuera flexible, pero nuevamente como una compensación, ya que
se le da esta libertad adicional,
puede abusar de ella. Así que no
abuse de esta idea de mezclar tipos.
Intente usar los mismos tipos cuando pueda, enteros con enteros, flotantes con flotantes.
Pero cuando no
pueda, comprenda las conversiones implícitas o realice las conversiones
explícitas utilizando el operador de conversión.
Entonces, nuevamente, otro problema u
otro concepto donde c es flexible, pero no debe abusar de él.
Entonces, siempre que se asigna un valor de punto flotante a una variable entera
en c, entonces tiene int x, float y, x
es igual a y.
La parte decimal del número se truncará.
Entonces, si tienes un número int x igual a 0, float f
es igual a 12. 125 y asigna f
a x, el valor de x va a ser 12.
Vas a perder esa precisión. El valor se truncará porque
está asignando un flotante a un int. Un int solo sabe cómo almacenar un número entero.
Entonces, el lenguaje de programación lo convierte automáticamente, el compilador a 12.
Solo se almacenará la importación.
Ahora bien, si asigna una variable entera a una variable de punto flotante, que es lo
contrario, no causa ningún cambio en el valor del número.
El sistema convierte el valor y lo almacena en la variable flotante.
Para que no tengas que preocuparte por asignarlo a un flujo.
Si asigna 12 a un flujo, seguirá siendo 12, solo 12. 0.
Cuando realizas aritmética con números enteros, esto es
diferente a simplemente asignar valores asignándolos a un flotante o flotante a int, esto es
cuando tienes una expresión, estás
haciendo una suma o una resta, sea cual sea el caso.
Cuando haces una resta o una suma, tienes dos operandos.
Entonces, un operador puede ser un int, un operando puede ser un flotante.
Tienes que saber cómo está sucediendo esa conversión.
Entonces, si tiene dos operandos en una expresión y ambos son
números enteros, entonces cualquier porción decimal resultante de una operación de división se descarta.
Entonces, si lo hace si tiene un número entero x, eso es 20.
Tienes un entero y, es 12. Y haces 20 dividido entre 12.
No vas a conseguir 1 punto algo algo algo. Solo obtendrás 1.
Descartará todos los resultados y lo pondrá nuevo porque nuevamente un int solo almacena un número entero.
Entonces dos números son enteros y están dividiendo.
No obtendrá un número de punto flotante. No obtendrás un número decimal.
Ahora bien, si un operador es un int y el otro es un flotante, entonces la
operación se formará como una operación de coma flotante. Entonces, si tienes float f es 20. 0, float a es 10,
un int, luego si haces una división
allí o 12, lo siento, eso sería más aplicable, entonces el resultado
será un número de punto flotante y el resultado
será 1 punto 8888 o lo que sea 1 punto cualquiera que
sea el caso.
No estás asignando estos datos a nada. Esta es una expresión de lo que va a devolver.
Entonces, dos ints en una división, será un número entero.
Un int y double o float, siempre será un float, siempre será una operación
de coma flotante decimal decimal.
Y esta es la conversión implícita. Eso es realmente lo que necesita para comprender
lo que está sucediendo y lo que el programa hace por usted si no hace nada.
Sin embargo, debe intentar hacer algunas conversiones
explícitas, que es lo que puede hacer con el operador de transmisión.
Y esto solo se conoce como casting más o menos.
Y ves la transmisión en muchos idiomas cuando quieres convertir.
Y todo lo que está haciendo es una conversión
explícita, está diciendo lo que quiere que sean los datos.
Por lo tanto, desea hacer esto si puede
porque, de lo contrario, los datos podrían degradarse o perderse.
Si hace dos entradas y está dividiendo
y no están divididas equitativamente, perderá todos esos datos.
Por lo tanto, es posible que exija la conversión de tipo
precisa que desea especificándola explícitamente.
A esto se le llama elenco y consiste en anteponer la
cantidad con el nombre del tipo deseado entre paréntesis.
Entonces, los paréntesis y el
nombre del tipo constituyen el operador
de límite.
Hace un paréntesis izquierdo y luego especifica el tipo de datos y luego escribe paréntesis.
Y eso va a convertir lo que esté a
la derecha, cualquiera que sea la expresión a la derecha o incluso si es solo una
variable, lo convertirá a lo que esté dentro de los paréntesis.
Entonces, se desea el tipo real, como un largo, se sustituye por ese tipo de palabra.
Por lo tanto, el operador de tipo pasado tiene una precedencia más alta que todos los operadores aritméticos, excepto el
unitario menos y la unidad más. Aún no hemos aprendido sobre la precedencia.
Vamos a hacerlo en la próxima conferencia. La precedencia es básicamente lo
que sucede, el orden de las operaciones que se realizan.
Así que proporcionaremos algunos ejemplos de eso. Todo lo que tienes que entender en este punto
es que el operador encasillado tiene prioridad sobre todos los demás operadores, excepto dos menos unarios y un más unario.
Así que aquí, por ejemplo, tenemos un número 21. 51 y tenemos el operador
de conversión porque sabemos que es un operador de conversión porque está
entre paréntesis y tiene un tipo. Y lo que básicamente estamos diciendo
es tomar 21. 51 conviértalo en un int.
Si toma un número de punto flotante convertido a
él, simplemente se convierte en el int, el número entero, 21.
Lo mismo está haciendo en el lado derecho, está convirtiendo 26. 99 a un int.
Entonces, ¿qué sucedería realmente aquí si hiciera esta expresión en una declaración? Se
evaluaría como 21 más 26. Truncaría los datos
de 0. 51 a un número entero y lo mismo que 0. 99.
Y ese es el operador de conversión, cualquier cosa entre paréntesis que contenga un tipo de datos.
Verás esto mucho.
Si dijera 21 más 26 y lo lanzara en flotadores, solo agregaría
un punto 0.
Por lo general, no lanzas a un tipo más preciso porque no
vas a ser más preciso.
Lanzas desde un tipo más preciso a uno menos preciso.
Así que más como un flotador a un int.
Por lo tanto, verá esto en algunos programas ocasionalmente
cuando utilice diferentes tipos. Debe intentar evitar el uso de diferentes
tipos si está haciendo aritmética. Pero si lo hace, verá esto.
El tamaño del operador, otro operador que es un poco extraño, no
se parece a muchos de los otros. Y esto en realidad parece una función.
Pero el tamaño de es un operador. Realiza una acción.
No está haciendo nada orientado a la función.
Lo que hace es decirle cuántos bytes están ocupados en la memoria
por un tipo dado. Entonces parece una función porque toma un argumento.
Y vamos a dar un ejemplo de eso. pero solo devolverá el número de bytes en la memoria. Recuerde que dependiendo del sistema que
esté ejecutando, la plataforma que esté ejecutando,
el sistema operativo, la arquitectura de la computadora, el hardware, los
diferentes tipos de datos se van a representar en memoria con diferentes tamaños.
Por ejemplo, un int podría tener 4 bytes en 1 sistema 8 en otro.
Entonces, lo que puede hacer es usar el operador sizeof como una palabra clave especial un operador en c y
puede pasar un tipo de datos y le dirá cuántos bytes está usando en la memoria.
Así que sizeof es en realidad un operador, no una función.
Se evalúa en tiempo de compilación y no en tiempo de ejecución a menos que se utilice una matriz de longitud variable en su argumento.
Y entonces lo mencionaremos. Básicamente, esto está diciendo que si tiene una
variable que está dentro del tamaño de una
matriz, no se resolverá en tiempo de compilación en tiempo de ejecución, por lo que
no es tan importante saberlo.
El argumento del operador sizeof puede ser una variable, un nombre de matriz,
el nombre de un tipo de datos básico, como
int float, el nombre de un tipo de datos derivado cualquier cosa o una expresión.
Entonces podría decir tamaño de x más y.
Y eso básicamente va a decir el tamaño de x
más el tamaño de y o los números resultantes. Si x es un int, y es int y su tamaño es de
16, diría que es una pulgada 4 bytes.
Si fuera int, uno fuera un flotante y el resultado fuera aritmética de punto flotante,
entonces sería flotante de 8 bytes o algo así.
Pero puede usarlo para muchas cosas, y debería usarlo para muchas cosas. Sizeof int, por ejemplo, dará como resultado
el número de bytes ocupados por una variable de tipo int.
Entonces esto devolvería 4 u 8 dependiendo de su sistema.
También puede aplicar el operador sizeof a una expresión, como mencioné, el
resultado es el tamaño del valor.
Eso resulta de la expresión del área. Entonces, si dos ints juntos, seguirán siendo un int.
Entonces todavía va a ser un tamaño. Pero verá que el operador sizeof también se utiliza cuando hablamos de punteros.
Quería hablar de esto ahora porque es un operador.
Pero proporcionaremos muchos más ejemplos de esto y del casting a lo largo de la clase a
medida que hablemos de más conceptos.
Específicamente, el operador sizeof entra en juego mucho más
cuando hablamos de punteros porque
cuando estás calculando cuánta memoria asignar, que es lo que son los
punteros, usas sizeof porque quieres ser preciso.
Pero también puedes usarlo para otras cosas.
Por lo tanto, utilice el operador sizeof siempre que sea posible para evitar tener que calcular tamaños de
código duro en su programa.
Los números mágicos de tamaños de código duro no son algo bueno porque, de
nuevo, si está en un sistema diferente, si tuviera que codificar 4
en 1 sistema para un int, en el otro sistema podría ser un 8,
así que use sizeof tanto como puede y veremos que esto se vuelve mucho
más relacional cuando hablemos de punteros.
Otros operadores que son
un poco extraños son el operador de asterisco.
Puede que te hayas dicho asterisco, ya hemos hablado de esto en la multiplicación.
Pero ese asterisco toma dos operandos, uno a la izquierda y otro a la derecha.
Si aplica el operador de asterisco a una
variable y solo dice el nombre de la variable asterisco con un solo argumento
a la derecha, representa algo más. En realidad, representa un puntero.
Desreferenciar un puntero.
Y de nuevo, no voy a insistir en esto ahora porque vamos a pasar
por esto cuando hablemos de punteros.
Pero si ve algo como la estrella a, no se asuste, eso es realmente válido.
Eso es hacer el asterisco del operador del puntero.
También puede ver los dos puntos del signo de interrogación.
Este es un operador que se utiliza para la toma de decisiones.
Si la condición es verdadera, si lo que está a la izquierda es verdadero, entonces se
evalúa el valor a la derecha después de los dos puntos y así sucesivamente.
Es una notación abreviada para una declaración if-else.
Es un operador ternario, se llama. Pero, de nuevo, no quiero discutir
esto realmente con mucho detalle ahora
porque vamos a hablar de esto cuando hablemos de nuestros
temas específicos.
Hablaremos del operador de torneado cuando hablemos de declaraciones de decisión. Hablaremos del operador
de asterisco unario cuando hablemos de punteros.
Pero si ven esto ahora y quisiera mencionarlo ahora porque técnicamente son operadores, entenderemos sus
casos de uso cuando hablemos de esos conceptos. Gracias.