Lets использовать термин «байт», чтобы представляет собой 8-бит хранения в памяти.
Байт со значением «0xff» можно получить либо в виде символа без знака, либо в виде символа с подписью.
BYTE byte = 0xff;
unsigned char* uc = (unsigned char*)&byte;
signed char* sc = (signed char*)&byte; // same as "char", the "signed" is a default.
printf("uc = %u, sc = %d\n", *uc, *sc);
(Я решил использовать указатели, потому что хочу продемонстрировать, что базовое значение, хранящееся в памяти, такое же).
Выведу
uc = 255, sc = -1
«подписал» номер использует один и тот же объем запоминающего устройства (количество бит) в качестве знака, но они используют прописную биту как флаг сказать процессор, следует ли рассматривать их как отрицательный или нет.
Битовая диаграмма, представляющая «255» (11111111) без знака, представляет собой тот же шаблон бита, который представляет -1. Битовая диаграмма «10000000» имеет значение 128 или -127.
Таким образом, вы можете сохранить число «255» в подписанном символе, сохранив «-1», а затем переведя его в беззнаковый int.
EDIT:
В-случае, если вам интересно: отрицательные номера начинаются "в верхней части" (т.е. 0xff/255) для удобства вычислений. Помните, что базовое хранилище представляет собой байт, поэтому, если вы берете «0xff» и добавляете 1, просто используя обычную математическую математику без знака, она выдает значение «0x00». Который является правильным значением для «i + 1», когда «i = -1». Конечно, это было бы нечетно, если отрицательные числа начинались с «-1», имеющего значение 0x80/128.
Вы пишете функцию 'b_create'? –
Да, я пишу функцию b_create. Структура была предоставлена, но она должна иметь возможность принимать до 255 в качестве параметра –
. Я не получаю его, если код вызова был указан, почему они пытаются передать значение btw от 0 до 255 значение?, I означает, что они ожидают char, а не unsigned char, но они передают значение, которое не вписывается в char ... – DGomez