Я пытаюсь вычислить бит четности в строке, используя следующий код, я сначала вычислил бит четности для строки, а затем вычислил parityBit для этого байта, из чего я собрал эти функции должен сделать трюк, но я прямо сейчас не уверен, программа, в которой я их использую, не работает, и я бы хотел, если это из-за этого или если я должен посмотреть какое-то другое место.вычислить бит четности из строки в c
char calculateParity(char *payload, int size){
char r = 0;
int i;
for(i = 0; i < size; i++){
r ^= payload[i];
}
return calcParityBit(r);
}
char calcParityBit(char x){
x ^= x >> 8;
x ^= x >> 4;
x ^= x >> 2;
x ^= x >> 1;
return x & 1;
}
Использование 'без знака char', а не' char'. Если вы смещаете знак (подписанный) 'char', тогда бит знака сохраняется. Это разрушает ваш анализ паритета. Кроме того, строка 'x^= x >> 8;' не нужна; 'x' имеет только 8 бит. –
Можете ли вы привести пример ввода, который не удается? Я не вижу здесь ничего плохого (этот бесполезный шаг 'x^= x >> 8' ничего не делает, даже если' char' подписан и отрицателен - перелистывание всех битов не изменяет четность). – harold