Dans mon programme, je dois effectuer des opérations arithmétiques sur des entiers non signés.Multiplication et division entiers non signés
- L'une variable présente une plage de 0 à 4294967295.
- La variable b est compris entre 0 et 32.
Quand je vérifie la condition aux limites en prenant les valeurs maximun pour un et b, je reçois 0 comme réponse puisque le débordement se produit quand j'essaye de multiplier un et MAX_NS. Idéalement je devrais obtenir 7 comme réponse. Comment pourrais-je écrire le programme tel que le débordement est pris en charge et je obtenir 7 comme la réponse et j'espère que cela fonctionne pour d'autres gamme de valeur valide pour a et b.Merci.
#include "stdio.h"
#define MAX_NS 1000000000
int main()
{
unsigned int a = 4294967295;
unsigned int b = 32 ;
unsigned int c = ((b * MAX_NS)/a);
printf("%d",c);
}
** Edit: ** S'il vous plaît noter que je ne peux pas utiliser long.I unsigned long ne peut utiliser que unsigned int pour les variables.
En utilisant 'unsigned long long'? Vous divisez par la valeur max non signée, de sorte que tous les résultats (sauf un) compris dans la plage de 'unsigned int' seront' 0'. –
Il n'y a aucun moyen d'utiliser l'ordre des opérations seul pour obtenir le même résultat que si les calculs étaient effectués avec des intermédiaires de taille arbitraire. Il y a peut-être des astuces spécifiques aux valeurs d'entrée (plus simple: 'c = 7;'), mais à part celles-ci, le mieux que vous pouvez faire est de promouvoir explicitement un type plus large, comme 'uintmax_t'. –
Je ne vois pas pourquoi vous attendez que la réponse soit 7. La réponse de précision complète aura les cinq bits de poids faible tout à zéro, et les 32 bits au-dessus de tout cela. Comment obtenez-vous 7 de cela? –