• Aucun résultat trouvé

Le type @bigint

17.1 Constante littérale

Utiliser le suffixe «G » pour définir une constante littérale de type @bigint :

@bigint a = 1234567890_1234567890_1234567890_G

message [a string] + "\n" # 123456789012345678901234567890

Vous pouvez utiliser le caractère de soulignement « _» pour séparer les chiffres.

Avec le préfixe «0x», vous pouvez écrire les nombres en héxadécimal :

@bigint a = 0x123456789ABCDEF0_123456789abcdefG

message [a hexString] + "\n" # 0x123456789ABCDEF0_123456789ABCDEF

Les lettres minuscules «a» à «f» et majuscules «A» à «F» sont utilisées pour définir les constantes entières en héxadécimal.

17.2 Construction

Le type @bigint ne définit que deux constructeurs :

constructeur zerodu type@bigint (page 166);

1.http://www.gmplib.org.

constructeur defaultdu type@bigint (page 166).

Ces deux constructeurs renvoient un @bigint initilisé à0.

Pour construire un @bigint, vous pouvez aussi utiliser lesgetterssuivants :

getter bigintdu type@bool (page 210) ;

getter bigintdu type@sint (page 237) ;

getter bigintdu type@sint64 (page 243) ;

getter bigintdu type@uint (page 283) ;

getter bigintdu type@uint64 (page 292).

17.2.1 Constructeur zero

constructor @bigint zero -> @bigint

Le constructeur zero renvoie un @bigint initialisé à zéro :

@bigint a = .zero

message [a string] + "\n" # 0

17.2.2 Constructeur default

constructor @bigint default -> @bigint

Le constructeur default, comme le constructeur zero, renvoie un @bigint initialisé à zéro :

@bigint a = .default

message [a string] + "\n" # 0

17.3 Comparaison

Le type @bigint implémente les six opérateurs de comparaison ==, !=, <, <=, >

et >=. Il implémente aussi les getters isZero et sign qui permettent de comparer un @bigint avec zéro.

17.4. CONVERSIONS 167

17.3.1 Opérateurs infixés de comparaison

operator @bigint == @bigint -> @bool operator @bigint != @bigint -> @bool operator @bigint >= @bigint -> @bool operator @bigint > @bigint -> @bool operator @bigint <= @bigint -> @bool operator @bigint < @bigint -> @bool

17.3.2 Getter isZero

getter @bigint isZero -> @bool

Cegetter renvoie true si valeur du récepteur est nulle, et false dans le cas contraire.

message [[0G isZero] ocString] + "\n" # YES message [[1G isZero] ocString] + "\n" # NO

17.3.3 Getter sign

getter @bigint sign -> @sint

Ce getter renvoie :

-1S si la valeur du récepteur est strictement négative ;

• 0S si la valeur du récepteur est nulle ;

• 1S si la valeur du récepteur est strictement positive.

message [[0G sign] >= 0S ocString] + "\n" # YES message [[1G sign] < 0S ocString] + "\n" # NO

17.4 Conversions

Lesgetters suivants permettent de convertir un @bigint dans un type entier usuel :

getter sintdu type@bigint (page 170) ;

getter sint64du type@bigint (page 171) ;

getter uintdu type@bigint (page 171) ;

getter uint64du type@bigint (page 171).

Ils échouent si le récepteur ne peut pas être converti sans perte. On peut utiliser les getterssuivants pour vérifier préalablement si une conversion est possible :

getter bitCountForSignedRepresentationdu type@bigint(page 168) ;

getter bitCountForUnsignedRepresentationdu type@bigint(page 168) ;

getter fitsInSIntdu type@bigint (page 169) ;

getter fitsInSInt64du type@bigint (page 169) ;

getter fitsInUIntdu type@bigint (page 170) ;

getter fitsInUInt64du type@bigint (page 170).

17.4.1 Getter bitCountForSignedRepresentation

getter @bigint bitCountForSignedRepresentation -> @uint

Ce getter permet de connaître le nombre de bits nécessaires pour écrire la valeur du récepteur dans la représentation binairecomplément à deux.

message [[0G bitCountForSignedRepresentation] string] + "\n" # 1 message [[1G bitCountForSignedRepresentation] string] + "\n" # 2 message [[-1G bitCountForSignedRepresentation] string] + "\n" # 1 message [[0x8000G bitCountForSignedRepresentation] string] + "\n" # 17 message [[-0x8000G bitCountForSignedRepresentation] string] + "\n" # 16

Pour connaître le nombre d’octets nécessaires pour représenter la valeur du récepteur dans la représentation binairecomplément à deux, on calcule :

([bigint bitCountForSignedRepresentation] - 1) / 8 + 1

Et pour le nombre de mots de 32 bits :

([bigint bitCountForSignedRepresentation] - 1) / 32 + 1

17.4.2 Getter bitCountForUnsignedRepresentation

17.4. CONVERSIONS 169 getter @bigint bitCountForUnsignedRepresentation -> @uint

Cegetterpermet de connaître le nombre de bits nécessaires pour écrire la valeur absolue du récepteur dans la représentation binairenaturelle.

message [[0G bitCountForUnsignedRepresentation] string] + "\n" # 1 message [[1G bitCountForUnsignedRepresentation] string] + "\n" # 1 message [[-1G bitCountForUnsignedRepresentation] string] + "\n" # 1 message [[0x8000G bitCountForUnsignedRepresentation] string] + "\n" # 16 message [[-0x8000G bitCountForUnsignedRepresentation] string] + "\n" # 16

Comme c’est la valeur absolue qui est prise en compte, le signe n’intervient pas.

Pour connaître le nombre d’octets nécessaires pour représenter la valeur absolue du récepteur dans la représentation binairenaturelle, on calcule :

([bigint bitCountForUnsignedRepresentation] - 1) / 8 + 1

Et pour le nombre de mots de 32 bits :

([bigint bitCountForUnsignedRepresentation] - 1) / 32 + 1

17.4.3 Getter fitsInSInt

getter @bigint fitsInSInt -> @bool

Ce getter permet de savoir si le récepteur peut être converti en @sint. Pour effectuer la conversion, utilisez le getter sintdu type@bigint (page 170).

message [[0x1234_5678G fitsInSInt] ocString] + "\n" # YES message [[0x7FFF_FFFFG fitsInSInt] ocString] + "\n" # YES message [[0x8000_0000G fitsInSInt] ocString] + "\n" # NO message [[-0x8000_0000G fitsInSInt] ocString] + "\n" # YES message [[-0x8000_0001G fitsInSInt] ocString] + "\n" # NO

17.4.4 Getter fitsInSInt64

getter @bigint fitsInSInt64 -> @bool

Cegetterpermet de savoir si le récepteur peut être converti en @sint64. Pour effectuer la conversion, utilisez le getter sint64du type@bigint (page 171).

message [[0x1234_5678_9ABC_DEF0G fitsInSInt64] ocString] + "\n" # YES message [[0x7FFF_FFFF_FFFF_FFFFG fitsInSInt64] ocString] + "\n" # YES message [[0x8000_0000_0000_0000G fitsInSInt64] ocString] + "\n" # NO message [[-0x8000_0000_0000_0000G fitsInSInt64] ocString] + "\n" # YES message [[-0x8000_0000_0000_0001G fitsInSInt64] ocString] + "\n" # NO

17.4.5 Getter fitsInUInt

getter @bigint fitsInUInt -> @bool

Ce getter permet de savoir si le récepteur peut être converti en @uint. Pour effectuer la conversion, utilisez le getter uintdu type@bigint (page 171).

message [[0x1234_5678G fitsInUInt] ocString] + "\n" # YES message [[0x1234_5678_9G fitsInUInt] ocString] + "\n" # NO message [[-1G fitsInUInt] ocString] + "\n" # NO

17.4.6 Getter fitsInUInt64

getter @bigint fitsInUInt64 -> @bool

Cegetterpermet de savoir si le récepteur peut être converti en @uint64. Pour effectuer la conversion, utilisez le getter uint64du type@bigint (page 171).

message [[0x1234_5678_9ABC_DEF0G fitsInUInt64] ocString] + "\n" # YES message [[0x1234_5678_9ABC_DEF0_1G fitsInUInt64] ocString] + "\n" # NO message [[-1G fitsInUInt64] ocString] + "\n" # NO

17.4.7 Getter sint

getter @bigint sint -> @sint

Cegetterpermet de convertir le récepteur en @sint. Si la conversion n’est pas possible, un message d’erreur est affiché et la valeur renvoyée n’est pas construite. On peut tester si la conversion est possible en appelant le getter fitsInSInt du type @bigint (page 169) .

17.4. CONVERSIONS 171 message [[-0x1234_5678G sint] hexString] + "\n" # 0xEDCBA988

17.4.8 Getter sint64

getter @bigint sint64 -> @sint64

Ce getter permet de convertir le récepteur en @sint64. Si la conversion n’est pas possible, un message d’erreur est affiché et la valeur renvoyée n’est pas construite.

On peut tester si la conversion est possible en appelant legetter fitsInSInt64du type

@bigint(page 169).

message [[-0x1234_5678_9ABC_DEF0G sint64] hexString] + "\n" # 0xEDCBA98765432110

17.4.9 Getter uint

getter @bigint uint -> @uint

Cegetterpermet de convertir le récepteur en @uint. Si la conversion n’est pas possible, un message d’erreur est affiché et la valeur renvoyée n’est pas construite. On peut tester si la conversion est possible en appelant le getter fitsInUInt du type @bigint (page 170) .

message [[0x1234_5678G uint] hexString] + "\n" # 0x12345678

17.4.10 Getter uint64

getter @bigint uint64 -> @uint64

Ce getter permet de convertir le récepteur en @uint64. Si la conversion n’est pas possible, un message d’erreur est affiché et la valeur renvoyée n’est pas construite.

On peut tester si la conversion est possible en appelant legetter fitsInUInt64du type

@bigint(page 170).

message [[0x1234_5678_9ABC_DEFG uint64] hexString] + "\n" # 0x123456789ABCDEF

Documents relatifs