Здравствуйте, я не могу понять - валидна ли такая конструкция:
#include <iostream>
using namespace std;
int main() {
int i = -1;
unsigned long long ull = i;
unsigned long long ull_2 = 0;
-- ull_2;
if(ull != ull_2)
cout << "not equal\n"; // не печатается
}
4.8 Integral conversions [conv.integral]
1 ...
2
If the destination type is unsigned, the resulting value is the least unsigned integer congruent to the source integer (modulo 2^n where n is the number of bits used to represent the unsigned type). [Note:In a two’s complement representation, this conversion is conceptual and there is no change in the bit pattern (if there is no truncation). — end note]
Может неправильно понимаю, но что-то вроде - взять беззнаковый тип, который достаточен для первоначально знакового целового. Т.е. sizeof(Integral_conversions(i)) == 4, а мне нужна конвертация в sizeof(Integral_conversions(i)) == 8. Т.е. очевидно, что есть разница между int->unsigned int->unsigned long long и int->unsigned long long. Запись unsigned long long ull = (unsigned long long)i не рассматриваем.