Недавно начал изучать C++. Написал простенький скрипт, дабы проверить свои знания, в итоге вместо ожидаемого 255, консоль выводит -1(тоже самое, если бы я использовал знаковую разметку int8_t).
#include <iostream>
int main()
{
uint8_t x = 0;
std::cout << ~x;
return 0;
}
Чтобы выполнить ~x, надо сделать integer promotion, т.е. неявное приведение более мелкого типа до int (то же самое для int16_t или uint16_t, если int 32-битный) т.е. получаем ~0x00000000, что равносильно (int) 0xFFFFFFFF, что означает -1.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей