Int64 non signés sous delphi 2009 [Résolu]

cs_Themistocle 22 Messages postés mercredi 25 décembre 2002Date d'inscription 26 janvier 2009 Dernière intervention - 24 janv. 2009 à 11:07 - Dernière réponse : cs_Themistocle 22 Messages postés mercredi 25 décembre 2002Date d'inscription 26 janvier 2009 Dernière intervention
- 26 janv. 2009 à 22:52
bonjour à tous,

ma question:
 --> j'aimerais savoir si Delphi 2009 permet l'utilisation d'entier64 bits non signés

 genre 'UnsignedInt64' ou approchant comme en C++

le pourquoi de cette question:
--> ceci pour permettre des opérations scalaires sur de grands entiers 64 bits  toujours positifs, et autoriser l'utilisation, sans restriction, de l'algèbre de Boole sur ces entiers.

NB: utilisation de BitBoard par exemple

en vous remerciant pour vos conseils et l'attention que vous porterez à cette question de programmeur candide

Themistocle
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
Bacterius 3869 Messages postés samedi 22 décembre 2007Date d'inscription 3 juin 2016 Dernière intervention - 24 janv. 2009 à 13:55
3
Merci
Déclare tout simplement un nouveau type :

AbsInt64=0..High(Int64);

En fait, tu redéfinis Int64 sur un nouvel ensemble de définition (de 0 au maximum de Int64).
Ici, AbsInt64 va de 0 à 2^64.

Les problèmes commencent si tu veux créer des entiers plus grands que Int64 (genre de 0 à 2^128).

Voilà ...

Cordialement, Bacterius !

Merci Bacterius 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 84 internautes ce mois-ci

Commenter la réponse de Bacterius
Meilleure réponse
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention - 25 janv. 2009 à 18:21
3
Merci
non

si tu definit un type : 0..High(Int64) tu crée un interval de 0 a 2^63 et non de 0 a 2^64-1

donc le mieux est d'utiliser le type UInt64 definit dans l'unité System

<hr size="2" width="100%" />

Merci f0xi 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 84 internautes ce mois-ci

Commenter la réponse de f0xi
cs_Themistocle 22 Messages postés mercredi 25 décembre 2002Date d'inscription 26 janvier 2009 Dernière intervention - 24 janv. 2009 à 12:03
0
Merci
en fait j'ai trouvé le type UInt64  dans l'unité  System; { Predefined constants, types, procedures... }


la déclaration est la suivante:


{$EXTERNALSYM UInt64      'unsigned __int64' } {$OBJTYPENAME UInt64     'Buj'}


j'imagine donc que l'on est autorisé à utiliser le type  UInt64      comme équivalent du type  unsigned __int64


je reformule donc ma question de la manière suivant:


 "suis je dans l'erreur?"


amicalement à tous



Themistocle
Commenter la réponse de cs_Themistocle
cs_Themistocle 22 Messages postés mercredi 25 décembre 2002Date d'inscription 26 janvier 2009 Dernière intervention - 24 janv. 2009 à 14:04
0
Merci
merci,
je vais essayer cette méthode.

amicalement

Themistocle
Commenter la réponse de cs_Themistocle
Bacterius 3869 Messages postés samedi 22 décembre 2007Date d'inscription 3 juin 2016 Dernière intervention - 25 janv. 2009 à 18:32
0
Merci
Ah oui en effet, puisque [Intervalle négatif] a toujours [Intervalle positif] + 1 éléments.

Bon ben alors oui, donc il faut utiliser UInt64 alors

Cordialement, Bacterius !
Commenter la réponse de Bacterius
cs_Themistocle 22 Messages postés mercredi 25 décembre 2002Date d'inscription 26 janvier 2009 Dernière intervention - 26 janv. 2009 à 06:10
0
Merci
merci Foxi,
cependant mon essai d'utilisation d' UInt64 est resté lettre morte sous Delphi 2009
( je n'ai peut être pas su l'utiliser [javascript:Insert_Emoticon('/imgs2/smile_angry.gif'); ])
alors que la méthode de Bactérius semble parfaitement fonctionner.

 j'ai défini un type:

 Type Bitboard = 0..High(Int64);

 et j'ai réussi à utiliser les opérateurs binaires : And, Or, Not... ect
 j'ai également pu utiliser sans problème les shift right et  shift left ( biitboard :=bitboard <<60) par exemple marche.
j'ai même implémenté une peit fonction de rotation de bitboard faisant dérouler le bitboard... les bits qui disparaissent à droite réapparaissent à gauche sans élition ni effet de bord.

il est possible que cela ne fonctionne qu'en apparence, et que ce dernier bit (2^64 -1) me crée un affreux effet papillon. [javascript:Insert_Emoticon('/imgs2/smile_clown.gif'); ] dans le doute je vais réessayer Uint64,

mais pourtant, cela semble marcher... comment tester  le 64ième bit !
   ... en tout cas je suis prévenu...

merci à tous les deux pour votre aide Themistocle
Commenter la réponse de cs_Themistocle
Bacterius 3869 Messages postés samedi 22 décembre 2007Date d'inscription 3 juin 2016 Dernière intervention - 26 janv. 2009 à 17:47
0
Merci
Vu que le maximum de mon type  0..High(Int64) est impair, tu auras probablement un décalage au bout d'un certain moment (mais un long ... long moment peut-être ...).
Mais à mon avis, la solution la plus pratique est tout de même celle de f0xi. Même si je ne trouve pas de UInt dans mes unités, mais c'est autre-chose.

Cordialement, Bacterius !
Commenter la réponse de Bacterius
cs_Themistocle 22 Messages postés mercredi 25 décembre 2002Date d'inscription 26 janvier 2009 Dernière intervention - 26 janv. 2009 à 21:41
0
Merci
  bactérius & foxi 
en effet  on trouve sur cette page:
--------------------------------------------------------------------------------------
var
  min, max : Int64;
begin
  // Set the minimum and maximum values of this data
type
  min := Low(Int64);
  max := High(Int64);
  ShowMessage('Min int64 value =
'+IntToStr(min));
  ShowMessage('Max int64 value =
'+IntToStr(max));
end;
, ----
[javascript:Insert_Emoticon('/imgs2/smile.gif'); ]... je vais pouvoir poursuivre

Themistocle

NB. pour ouvrir ce fichier j'ai simplement défini une variable Uint64 et , via le menu contextuel( clic droit sur "Uint64" ) j'ai sélectionné " rechercher le fichier sous le curseur" :
puis :"rechercher Uint64" dans ce fichier: les définitions existent bien aux ligne données ci dessus.
Commenter la réponse de cs_Themistocle
cs_Themistocle 22 Messages postés mercredi 25 décembre 2002Date d'inscription 26 janvier 2009 Dernière intervention - 26 janv. 2009 à 22:52
0
Merci
pour en avoir le coeur net, j'ai utilisé une fonction :



function  _StrUInt64Digits(val: TBitboard; width: Integer; sign: Boolean): ShortString;




fortement (++) inspirée de l'homonyme du fichier system pour afficher , en string, la valeur de mes bitboards







avec le Type




TBitboard = 0..High(Int64)






:




mon code se plante dès la valeur 2^63 (incluse) et affiche des caractères aléatoires
( enfin pas vraiment aléatoires mais sans rapport avec un nombre )












avec le 


type TBitboard  =    UInt64 :







mon code fonctionne et affiche



18446744073709551615 pour  si mon bitboard vaut  2^64 -1

chapeau f0xi

Themistocle
Commenter la réponse de cs_Themistocle

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.