una tipos sacar numero minimo mayor maximo matriz datos como arreglo c++ c++11 standards language-lawyer unsigned

tipos - ¿El estándar de C++ requiere que el máximo de los números enteros sin signo sea de la forma 2 ^ N-1?



numero mayor de un arreglo java (2)

C ++ especifica los rangos de los tipos integrales por referencia al estándar C. El estándar C dice:

Para los tipos de enteros sin signo distintos de los caracteres unsigned char , los bits de la representación del objeto se dividirán en dos grupos: bits de valor y bits de relleno (no es necesario que haya ninguno de estos últimos). Si hay N bits de valor, cada bit representará una potencia diferente de 2 entre 1 y 2 N - 1 , de modo que los objetos de ese tipo podrán representar valores de 0 a 2 N - 1 utilizando una representación binaria pura; Esto se conocerá como la representación del valor. Los valores de cualquier bit de relleno no están especificados.

Además, C ++ requiere:

Los enteros sin signo obedecerán las leyes del módulo aritmético 2 n donde n es el número de bits en la representación del valor de ese tamaño particular de entero.

Al juntar todo esto, encontramos que un tipo integral sin signo tiene n bits de valor, representa los valores en el rango [0, 2 n ) y obedece las leyes del módulo aritmético 2 n .

Para T modo que el valor std::is_integral<T>::value && std::is_unsigned<T>::value sea true , el estándar C ++ garantiza que:

std::numeric_limits<T>::max() == 2^(std::numeric_limits<T>::digits)-1

en el sentido matemático? Estoy buscando una prueba de eso basada en citas de la norma.


Creo que esto está implícito en [basic.fundamental]/4 (N3337):

Los enteros unsigned , declarados unsigned , obedecerán las leyes del módulo aritmético 2^n donde n es el número de bits en la representación del valor de ese tamaño particular de entero.