Existe-t-il un moyen d'implémenter un entier non signé de 33 bits pour le compilateur gcc? A partir de maintenant, j'utilise des entiers 64 bits non signés pour stocker une valeur de 33 bits. Mais malheureusement, je veux que la valeur soit réinitialisée après avoir atteint 33 bits ...comment implémenter le type entier non signé 33 bits
Répondre
struct int33
{
unsigned long long x:33;
};
?
Vous pouvez utiliser un champ de bits, par ex. (result)
#include <stdint.h>
#include <cstdio>
struct uint33_t {
uint64_t value : 33;
};
int main() {
uint33_t x = {0x1FFFFFFFFull};
printf("%llx\n", x.value);
x.value += 1;
printf("%llx\n", x.value);
return 0;
}
Les champs binaires de types de données que 'int',' signed int' et 'unsigned int' sont des extensions spécifiques au compilateur, mais GCC le supporte donc de toute façon +1 :-) – Christoffer
@Christoffer: Ce n'est pas une extension. La norme C++ permet d'utiliser n'importe quel type d'intégrale ou d'énumération (§ [class.bit]/3) comme type de champ de bits. – kennytm
Merci beaucoup .. ça aide. J'adore Stackoverflow – neuron
La valeur va déborder lorsqu'il est poussé au-delà de la limite de 33 bits; Si vous utilisez un masque de 33 bits lorsque vous récupérez la valeur, vous devriez obtenir le comportement souhaité.
Traduit: Utiliser le type de données 64 bits natif, et seulement utiliser 33 bits de celui-ci lors de la lecture. –
@Billy: merci pour la reformulation. – fbrereto
j'ai écrit un code traitant ceci:
http://bitbucket.org/pnathan/logic-vector
Vous êtes libre de regarder par-dessus. Si vous le modifiez/l'améliorez, veuillez le corriger. :)
- 1. Convertir un entier 16 bits non signé en un entier 16 bits signé en C#
- 2. entier non signé de PHP sur 32 bits et 64 bits plate-forme
- 3. Trouver des positions de bits dans un entier 32 bits non signé
- 4. Comment faire pour convertir un entier de 32 bits de non signé à signé en MySQL ou PHP?
- 5. C++ types de données primitives: lire non signé 30 bits
- 6. Convertit un entier signé 16 bits en 2 octets?
- 7. Convertir un octet Python en un "entier 8 bits non signé"
- 8. Comment passer un entier comme paramètre non signé dans VB.NET?
- 9. Comment convertir un CGFloat à un entier non signé
- 10. Le mot de type de données msvc est-il signé ou non signé?
- 11. Hexadécimal à un tableau non signé 8 bits dans VB.NET
- 12. C: Convertir signé à non signé
- 13. Dans une expression C où un entier non signé et un entier signé sont présents, quel type sera promu à quel type?
- 14. Simule un entier non signé de 128 bits dans SQL et C# en utilisant une valeur signée 64 bits?
- 15. Macro pour tester si un type entier est signé ou non
- 16. JNA entier non signé par référence donne des résultats étranges
- 17. Signé ou non signé dans MySQL
- 18. Quel est le but du type non signé ici?
- 19. Comment obtenir l'équivalent non signé d'un type intégral en C++?
- 20. Comment convertir une chaîne hexadécimale en entier signé?
- 21. Comment trouver tous les facteurs premiers dans un entier long non signé?
- 22. Comment les nombres négatifs sont-ils représentés dans un entier signé 32 bits?
- 23. Comment convertir une chaîne hexadécimale en entier non signé 64bit (uint64_t) de manière rapide et sûre?
- 24. Comment puis-je vérifier si un entier signé est positif?
- 25. Pourquoi la conversion de size_t en un entier non signé me donne-t-elle un avertissement?
- 26. coulée entre signé et non signé
- 27. Comment puis-je supprimer un entier (non signé) dans ActionScript/Flex 3?
- 28. Comment puis-je inverser des bits d'un octet non signé en Java?
- 29. Joindre MSB et LSB d'un entier signé de 16 bits (complément à deux)
- 30. Simuler C# de sbyte (8 bits entier signé) coulée en Python
Je me demande pourquoi vous en auriez même besoin ... –