Branch :
# 1.14 Entier ## 1.14.1 Petits entiers IKC3 prend en charge toutes les tailles d'entiers C depuis `U8` (équivalent à `uint8_t` en C) jusqu'à `U64` (`uint64_t`) pour les entiers non signés, et de `S8` à `S64` pour les entiers signés. En plus de ces 8 types de base, il existe 2 types d'entiers de taille pointeur : `Uw` pour les entiers non signés, et `Sw` pour les entiers signés. Les petits entiers prennent peu de place, sont statiques, passés par valeur et non par pointeur, ce qui les rend rapides. Ils n'ont pas besoin d'être nettoyés après usage et peuvent donc être utilisés dans des tableaux comme en C. ```elixir ikc3> type(-1) S8 ikc3> type(-128) S16 ikc3> type(-32768) S32 ikc3> type(-2147483648) S64 ikc3> type(-9223372036854775807) S64 ikc3> type(0) U8 ikc3> type(256) U16 ikc3> type(65536) U32 ikc3> type(4294967296) U64 ikc3> type(18446744073709551615) U64 ``` ## 1.14.2 Grands entiers IKC3 prend en charge les grands entiers, compatibles avec les petits entiers. Leur type est `Integer` et ils peuvent contenir des valeurs aussi grandes que la mémoire le permet. Ils sont plus lents car alloués dynamiquement sur le tas (`malloc`). ```elixir ikc3> type(1000000000000000000000000000000) Integer ``` ## 1.14.3 Opérations sur les entiers ### 1.14.3.1 Opérateur `~` Négation binaire. ```elixir ikc3> ~ 1 254 ikc3> ~ -1 0 ikc3> ~ 0 255 ikc3> ~ 255 0 ikc3> ~ (U16) 1 65534 ikc3> ~ (S16) 1 -2 ``` ### 1.14.3.2 Opérateur `+` Addition entière. Tous les entiers positifs peuvent être définis en termes d’addition de zéro ou d’un entier positif, et un. Par exemple : ```elixir 1 = 0 + 1 2 = 0 + 1 + 1 3 = 0 + 1 + 1 + 1 etc. ``` ### 1.14.3.3 Opérateur `-` Soustraction entière. Retire un entier d’un autre entier. ### 1.14.3.4 Opérateur `*` Multiplication entière. Initialise le résultat à zéro, ajoute un entier `a` et répète cela `b` fois. ### 1.14.3.5 Opérateur `/` Division entière. Inverse de la multiplication : pour tous entiers `a` et `b`, il existe un couple `q` et `r` tel que `a = b * q + r`. La division retourne `q`. ### 1.14.3.6 Opérateur `mod` Modulo entier. Retourne `r` dans l’équation précédente (voir `/`). ### 1.14.3.7 Opérateur `<<` Décalage à gauche. ## 1.14.4 Exemples ```elixir ikc3> type(1) U8 ikc3> type(1000000000000000000000000000000) Integer ikc3> a = 1 + 100000000000000000000000000000000 100000000000000000000000000000001 ikc3> a * a 10000000000000000000000000000000200000000000000000000000000000001 ikc3> a * a / 1000000000000000000000000000000000000000000000000000 10000000000000 ``` --- Top : [Documentation KC3](../) Précédent : [1.13 Identifiant](1.13_Ident) Suivant : [1.15 Liste](1.15_List)