Os tipos de dados em qualquer linguagem de programação são apenas representações de conceitos abstratos existentes em outras ciências ou ramos do conhecimento. Qualquer que seja o tipo de dado existirá sempre dois elementos presentes:
O(s) valor(es) representa(m) o estado do tipo de dado enquanto que a(s) operação(ões) representa(m) as transições de estado do tipo de dado. Tanto os valores quanto as operações devem, sempre, estar em situações permitidas, válidas. Situações proibidas sempre devem ser evitadas e, portanto, não são permitidas.
Contudo, a representação computacional impõe limitações à plenitude da ideia matemática. Isso significa que a computação, por meio do tipo de dado primitivo “int”, representa uma parte da ideia referente à teoria matemática dos conjuntos dos números inteiros. Por exemplo, imagine um tipo de dado “int” de 8 bits sem sinal. Esse tipo possui dois limites: inferior e superior. O menor valor possível para o limite inferior é o número zero (0) e o maior valor possível para o limite superior é o número 255 (2^⁸ - 1). Além disso, as operações permitidas são, geralmente, as aritméticas (+, -, *, /, %, dentre outras) e as relacionais (==, !=, <, >, dentre outras), sendo que em algumas linguagens, as operações lógicas (&&, ||, dentre outras) também são.