---
title: "Tipos de datos en Solidity: enteros con signo (int) y sin signo (uint)"
description: "Aprende sobre los tipos de datos de Solidity y cómo usar tipos comunes como int y uint."
---

# Tipos de datos en Solidity: enteros con signo (int) y sin signo (uint)

[Solidity](https://www.alchemy.com/overviews/solidity) es un lenguaje de alto nivel, orientado a objetos y de tipado estático que los desarrolladores usan para desplegar aplicaciones en la blockchain de Ethereum. Al ser un lenguaje de tipado estático, [Solidity](https://www.alchemy.com/dapps/solidity) requiere que el desarrollador defina la estructura y el tipo de dato de cada variable de estado y variable local en tiempo de compilación.

Por eso, los tipos de datos de Solidity son esenciales de entender al [aprender sobre smart contracts en Solidity.](https://www.alchemy.com/overviews/learn-solidity) Los tipos de datos clasifican la información almacenada en variables en distintas categorías, como enteros, booleanos, direcciones, literales, arrays, entre otros.

Este artículo define qué son los tipos de datos en Solidity y profundiza en tipos de enteros comunes como uint e int.

## **¿Qué son los tipos de datos en Solidity?**

**Al igual que en otros lenguajes de tipado estático, los tipos de datos en Solidity especifican la información almacenada en una variable, ya sea un valor específico o una dirección de referencia a una ubicación de memoria.**

Los tipos de datos en Solidity son flexibles, ya que se pueden combinar tipos elementales para formar tipos complejos, como arrays de enteros o estructuras con variables de distintos tipos.

Sin embargo, una de las restricciones clave en Solidity es que el desarrollador debe especificar el tipo de dato de cada variable en tiempo de compilación. Una vez declarado, el compilador sabe exactamente cuánto espacio necesita reservar para la variable.

Los tipos de datos en Solidity se pueden clasificar en dos grupos principales: tipos por valor y tipos por referencia.

### **¿Qué son los tipos por valor?**

Los tipos por valor en Solidity, como los enteros, son variables que almacenan datos dentro de un espacio de memoria definido y pasan un valor duplicado cuando se usan dentro de una función o una asignación. Este tipo de valor almacena una copia independiente del dato duplicado, por lo que cualquier cambio en el valor de la copia no altera el tipo por valor original.

Solidity tiene ocho tipos por valor: enteros con y sin signo, booleanos, números de punto fijo, direcciones, arrays de bytes, literales, enums, y tipos de contrato y de función. Aquí hay un resumen rápido de qué representan:

1. **Enteros con/sin signo** - Los tipos de datos enteros almacenan números enteros; los enteros con signo almacenan valores positivos y negativos, mientras que los enteros sin signo almacenan solo valores no negativos.
1. **Booleanos** - El tipo de dato booleano se declara con la palabra clave bool y solo puede tener dos valores constantes posibles: true o false.
1. **Números de punto fijo** - Los números de punto fijo representan números decimales en Solidity, aunque aún no cuentan con soporte completo por parte de la [máquina virtual de Ethereum](https://www.alchemy.com/overviews/what-is-the-ethereum-virtual-machine-evm).
1. **Direcciones** - El tipo address se usa para almacenar direcciones de wallets o smart contracts de Ethereum, con un tamaño aproximado de 20 bytes. Un tipo address puede llevar el sufijo "payable", que lo restringe a almacenar únicamente direcciones de wallets y usar las funciones transfer y send para transferir criptomonedas.
1. **Arrays de bytes** - Los arrays de bytes, declarados con la palabra clave "bytes", son un array de tamaño fijo usado para almacenar un número predefinido de bytes, hasta 32, generalmente declarado junto con la palabra clave (bytes1, bytes2).
1. **Literales** - Los literales son valores inmutables como direcciones, racionales y enteros, strings, unicode y hexadecimales, que pueden almacenarse en una variable.
1. Enums - Los enums, abreviatura de Enumerable, son un tipo de dato definido por el usuario que restringe el valor de la variable a un conjunto particular de constantes definidas dentro del programa.
1. Tipos de contrato y función - Al igual que en otros lenguajes orientados a objetos, los tipos de contrato y de función se usan para representar clases y sus funciones, respectivamente. Los contratos contienen funciones que pueden modificar las variables de estado del contrato.

### **¿Qué son los tipos por referencia?**

Los tipos por referencia en Solidity, como los [**arrays fijos y dinámicos**](https://www.alchemy.com/overviews/solidity-arrays), son variables que apuntan a la dirección de memoria de los datos almacenados. A diferencia de los tipos por valor, los tipos por referencia no almacenan ningún valor, sino que sirven como localizador del dato deseado. Los tipos por referencia se clasifican principalmente en cuatro categorías:

- **Arrays fijos** - Los arrays fijos son arrays con un tamaño predefinido en tiempo de ejecución, declarado durante la inicialización.
- **Arrays dinámicos** - Los arrays dinámicos se usan para asignar el tamaño de forma dinámica en tiempo de ejecución, según los datos que el programa necesite almacenar.
- **Structs** - [Los structs en Solidity](https://www.alchemy.com/overviews/solidity-struct) son un tipo de dato complejo que permite crear un tipo personalizado que contiene miembros de otros tipos, generalmente usado para agrupar datos relacionados.
- **Mappings** - [Los mappings](https://www.alchemy.com/overviews/solidity-mapping) almacenan datos en pares clave-valor, similar a los diccionarios en otros lenguajes orientados a objetos, donde la clave es un tipo de dato por valor, y el valor puede ser de cualquier tipo.

## **¿Qué es un entero con signo (int)?**

**Un entero con signo es un tipo de dato por valor declarado con la palabra clave int para almacenar valores enteros positivos o negativos, en un rango de -2 elevado a la 255 hasta 2 elevado a la 255 menos 1.**

### **Tamaños de enteros en Solidity**

La palabra clave int es una abreviatura de int256, un tipo de dato entero que puede almacenar hasta 256 bits de datos. Este tipo de dato por valor también puede especificarse en tamaños más pequeños en pasos de 8, como int8, int16, int32, int64, int128 e int256. Los desarrolladores pueden usar tamaños más pequeños, como int8, int16, int32 o int64, si quieren restringir el tamaño de la variable y optimizar el rendimiento.

## **¿Qué es un entero sin signo (uint)?**

**Un entero sin signo es un tipo de dato por valor declarado con la palabra clave uint que almacena un valor entero igual o mayor a cero, en un rango de 0 a 2 elevado a la 255 menos 1.**

### **Tamaños de datos uint**

Al igual que con el entero con signo, la palabra clave uint es una abreviatura de uint256, un tipo de dato entero sin signo que puede almacenar hasta 256 bits de datos.

Un tipo de dato entero sin signo también puede especificarse en tamaños más pequeños en pasos de 8, desde un mínimo de uint8 hasta un máximo de uint256. Las denominaciones son uint8, uint16, uint32, uint64, uint128 y uint256.

## **¿Cuál es la diferencia entre enteros con signo y sin signo?**

**La diferencia clave entre los enteros con signo y sin signo es que los enteros con signo pueden almacenar tanto valores positivos como negativos, mientras que los enteros sin signo solo pueden almacenar valores no negativos.** Por lo tanto, aunque ambos son tipos de datos por valor, los enteros sin signo tienen restringido el rango de valores que pueden almacenar.

En los [smart contracts](https://www.alchemy.com/overviews/solidity-smart-contract), esta diferencia obliga al desarrollador a prestar atención al valor que se almacena en el tipo de dato para evitar errores.

## **¿Cuál es la diferencia entre uint y uint256?**

**Tanto uint como uint256 comparten la misma definición, ya que son alias, pero al indicar explícitamente el tamaño del entero, uint256 se ajusta a las buenas prácticas de creación de smart contracts, mejorando la legibilidad y la consistencia del código.**

Fuera de eso, no hay diferencia entre las palabras clave uint y uint256. La distinción depende del desarrollador, que elige usar una u otra para darle más detalle al código.

## **Comienza a usar enteros con signo y sin signo (uint) en tus smart contracts**

Usar los tipos de datos correctos en Solidity es fundamental para desarrollar smart contracts eficientes y legibles. Estos tipos de datos ayudan al compilador a entender la cantidad y el tipo de memoria que necesita asignar para variables específicas, como enteros o arrays. Asignar espacio en la blockchain consume gas, por lo que hay que tener cuidado al declarar el tamaño y el tipo de las variables.

Si quieres seguir aprendiendo sobre Solidity y sus características, [asegura tu lugar](https://university.alchemy.com/?a=ffa69917a7) en el Bootcamp de Desarrollador Ethereum de 7 semanas de Alchemy University.
