Могут ли быть унифицированные биты, если я назначу unsigned int подписанному int - PullRequest
0 голосов
/ 18 апреля 2019

У меня есть целое число без знака (скажем, 32 бита), Когда я назначаю его целому числу со знаком, Могут ли после преобразования быть целые числа со знаком после преобразования.

unsigned int i = 10 
int j = i;

Я получил ошибку от valgrindговоря неинициализированные байты, наблюдаемые в

int func(long,int,int);

, я вижу, что беззнаковое целое число передается в эту функцию в третьем аргументе.Я подозреваю, может ли это преобразование без подписи вызвать эту ошибку valgrind

1 Ответ

3 голосов
/ 18 апреля 2019

Когда вы присваиваете переменную, вы присваиваете значение с правой стороны, а не объектное представление с правой стороны.Поэтому после присвоения переменной никогда не будет неинициализированных битов (или байтов).

Кроме того, поскольку байт является минимальной адресуемой единицей, вы не можете назначать значения только определенным битам в байте.Это все или ничего.

Можно назначать только определенные байты переменной, если это делается с помощью char * или memcpy.Например:

unsigned char c[] = { 1, 2 };
int j;
memcpy(&j, c, sizeof(c));

Предположим, что int равен 4 байта, тогда только первые 2 байта j записываются, а последние 2 остаются неинициализированными.

...