Я действительно новичок в кодировании (начал около 1,5 недель назад), так что, надеюсь, мой вопрос здесь не является слишком отвратительным преступлением (а если это так, я прошу прощения).
Я пытаюсь написать функцию, которая считает биты в целом числе, и код, который я написал, кажется, отлично работает для подсчета положительных целых чисел, но отрицательные целые числа, похоже, ведут себя очень забавно.
Из того, что я узнал, у меня сложилось впечатление, что перед целым числом с отрицательным знаком просто установлен бит, как в следующем примере:
2: 0000 0010
-2: 1000 0010
Так что в идеале моя функция должна действовать так: bit_count([negative number here])
совпадает с 1 + bit_counter([absolute value of negative number])
Но это не так.
Вот моя функция:
int bit_count(int byte)
{
int bit;
int tally;
tally = 0;
for (bit = 0x80; bit > 0; bit = bit >> 1)
{
if ((byte & bit) != 0)
++tally;
}
return (tally);
}
Некоторые примерные данные:
bit_count(-1)
приводит к 8 bit_count(-6)
приводит к 6 bit_count(-4)
приводит к 6
и так далее...
У меня был друг, которому я довольно доверяю, предположил, что в зависимости от машины перед подписанным битом на самом деле было больше метаданных, которые включала моя функция подсчета битов, но я не знаю, что мне нужно. сделать, чтобы исправить это.
Спасибо