Что такое CHAR_BIT?

Заключение в кавычки кода для вычислений целочисленного абсолютного значения (брюшной пресс), не переходя из http://graphics.stanford.edu/~seander/bithacks.html:

int v;           // we want to find the absolute value of v
unsigned int r;  // the result goes here 
int const mask = v >> sizeof(int) * CHAR_BIT - 1;

r = (v + mask) ^ mask;

Запатентованное изменение:

r = (v ^ mask) - mask;

Что CHAR_BIT и как использование это?

85
задан Spikatrix 13 May 2016 в 02:13
поделиться

2 ответа

Вы должны знать, что этот код зависит от определяемого реализацией поведения правого битового сдвига для подписанных типов. gcc обещает всегда обеспечивать нормальное поведение (расширение знакового бита), но ISO C позволяет реализации обнулять верхние биты.

Один из способов решения этой проблемы:

#ifdef HAVE_SIGN_EXTENDING_BITSHIFT
int const mask = v >> sizeof(int) * CHAR_BIT - 1;
#else
int const mask = -((unsigned)v >> sizeof(int) * CHAR_BIT - 1);
#endif

Ваш Makefile или config.h и т. Д. Может определять HAVE_SIGN_EXTENDING_BITSHIFT во время сборки в зависимости от вашей платформы.

-1
ответ дан 5 November 2019 в 05:56
поделиться

CHAR_BIT - это количество бит в char. В наши дни почти все архитектуры используют 8 бит на байт, но это не всегда так. Некоторые старые машины использовали 7-битный байт.

Это можно найти в .

207
ответ дан 5 November 2019 в 05:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: