Что означает (unsigned char)~0 >> 1?
Помогите разобраться в коде! Нужно максимальное и минимально значение signed и unsigned char. Не понимаю, что значит >> и ~
signed char max_char_s = (char)((unsigned char)~0 >> 1);
signed char min_char_s = max_char_s + 1;
unsigned char max_char_u = (unsigned char)~0;
unsigned char min_char_u = 0;
printf("Signed Char: Max = %d, Min = %d\n", max_char_s, min_char_s);
printf("Unsigned Char: Max = %u, Min = %u\n", max_char_u, min_char_u);
Ответы (1 шт):
Автор решения: Stanislav Volodarskiy
→ Ссылка
NB оба примера упрощены, чтобы было легче понять.
~ - инверсия всех битов числа. ~0 - значение в котором все биты установлены. Если было 000000002, получится 111111112.
>> - смещает биты на несколько позиций вправо, старшие биты обнуляются. В случае >> 1 если было 111111112, станет 011111112.
Но лучше не играть с битами, а использовать стандарт:
#include <limits.h>
#include <stdio.h>
int main(void) {
printf(" CHAR_MIN = %5d\n" , CHAR_MIN);
printf(" CHAR_MAX = %5d\n\n", CHAR_MAX);
printf("SCHAR_MIN = %5d\n" , SCHAR_MIN);
printf("SCHAR_MAX = %5d\n\n", SCHAR_MAX);
printf("UCHAR_MAX = %5u\n" , UCHAR_MAX);
}
$ gcc -std=c11 -pedantic -Wall -Wextra -Werror -Wwrite-strings -Wconversion char-limits.c $ ./a.out CHAR_MIN = -128 CHAR_MAX = 127 SCHAR_MIN = -128 SCHAR_MAX = 127 UCHAR_MAX = 255