Mam do czynienia z problemem, w którym liczby całkowite ze znakiem należy konwertować na unsigned, zachowując ich zakres i kolejność.Mapowanie zakresu liczb całkowitych ze znakiem na unsigned
Biorąc pod uwagę następującą definicję:
#include <limits>
#define MIN(X) std::numeric_limits<X>::min();
#define MAX(X) std::numeric_limits<X>::max();
Jaki jest najszybszy i poprawny sposób odwzorować podpisany szereg [MIN (T), MAX (T)] do unsigned zakresie [0, MAX (U)]?
gdzie:
T podpisaną typ całkowity
u oznacza liczbę całkowitą bez znaku, typ
sizeof (T) == sizeof (U)
I trie d różne sposoby twiddling i numeryczne, aby wymyślić rozwiązanie, bez powodzenia.
_ "Mam do czynienia z problemem, w którym liczby całkowite ze znakiem powinny zostać przekonwertowane na unsigneds, zachowując ich zakres" _ Er, czego się spodziewałeś "-1"? Czy próbujesz zachować zasięg, ale nie rzeczywistą wartość? Albo co? I dlaczego "różne metody" nie działały dla ciebie? W jaki sposób nie działają? (czym jest "bez powodzenia" w tym kontekście?) Zadaj konkretne pytanie dotyczące określonego podejścia. –
Jeśli zachowujesz zakres, zachowujesz wartość, ponieważ wartość jest określona przez jej pozycję wewnątrz zakresu. Jeśli czytasz pytanie, to wyraźnie chodzi o konwersję zakresu, gdzie -MAX (T) staje się 0. Więc -1 staje się MAX (U)/2 - 1. – plasmacel
@plasmacel Sugeruję edytowanie twojego pytania w celu wyjaśnienia intencji w twoim ostatnim komentarzu . Ogólnie, mapowanie ABC na XYZ będzie na przykład spełnione przez A-> X, B-> Z, C-> Y. –