31

With regard to Solidity, What is UINT256?

From the token example at https://ethereum.org/token :

/* This creates an array with all balances */
mapping (address => uint256) public balanceOf;

Beyond being a variable type in general computing, I'd love to gain a better of understanding and context in the Ethereum world. Why not just use an INT? Assuming it's a specific type of Integer, what does the "U" denote?

3

2 Answers 2

33

With regard to Solidity...

This is really more a general computer science question that would best be answered on Stack Overflow.

At the risk of repeating what @Ismael has linked to...

  • U - unsigned (meaning this type can only represent positive integers, not positive and negative integers)
  • INT - integer
  • 256 - 256 bits in size

Context: The EVM (Ethereum Virtual Machine) uses 256 bits as its word size. See: Rationale behind 256-bit words in EVM

2
18

Integers in Solidity:

uint256 (uint is an alias) is a unsigned integer which has:

  • minimum value of 0
  • maximum value of 2^256-1 = 115792089237316195423570985008687907853269984665640564039457584007913129639935 //78 decimal digits

int256 (int is an alias) is a signed integer which has:

  • minimum value of -2^255 = -57896044618658097711785492504343953926634992332820282019728792003956564819968
  • maximum value of 2^255-1 = 57896044618658097711785492504343953926634992332820282019728792003956564819967

For example, in Solidity we could write the following code:

uint8 public constant decimals = 6;
uint256 public constant totalSupply = 1000000*10**uint256(decimals); // 1000000000000

P.S. It is unusual that int/uint in Solidity have 256 bits in size, because there are such popular languages as C#/Java that have int data type with 32 bits in size:

  • minimum value of -2^31 = -2147483648
  • maximum value of 2^31-1 = 2147483647
2
  • 3
    I think 256 bits was chosen so that there would be enough addresses for the ethereum network to continue to work indefinitely.
    – forgetso
    Commented Jul 2, 2019 at 8:14
  • 1
    @forgetso addresses in Ethereum are 160 bits, not 256 bits. Words in the EVM are 256 bits in length, and uint256 is almost always used for balances. Commented May 12, 2022 at 4:38

Not the answer you're looking for? Browse other questions tagged or ask your own question.