Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
SDmaN
54 / 51 / 2
Регистрация: 22.07.2011
Сообщений: 436
#1

Минимальное количество байт, которое займёт отрицательное число - C++

18.05.2013, 21:45. Просмотров 432. Ответов 1
Метки нет (Все метки)

Нужно узнать минимальное количество байт, которое займёт число. То есть в int у нас может быть число и 256 (00000001 00000000), которое займёт 2 байта, и 255 (00000000 11111111), которое может занять всего 1 байт. Нужно вычислить это минимальное количество.

Написал функцию:
C++
1
2
3
4
5
6
7
8
9
10
11
12
int BytesCount(int Number)
{
    int NumberOfBytes = 0;
 
    do
    {
        Number = Number >> 8;
        NumberOfBytes++;
    } while(Number != 0);
 
    return NumberOfBytes;
}
Для 255 и 256 она возвращает правильное число байт, но вот для -255 (11111111 00000001), после двукратного сдвига на 8 бит вправо, получается число -1. Почему?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.05.2013, 21:45     Минимальное количество байт, которое займёт отрицательное число
Посмотрите здесь:
Минимальное число, которое делится нацело C++
C++ Найти отрицательное число и после отрицательное число заменить все элемент на нули
C++ Определить минимальное число пирамид которое требуется сложить
C++ Напечатать минимальное число, больше 500, которое нацело делится на 47
C++ Напечатать минимальное число, большее 200, которое нацело делится на 17
Отобразить минимальное положительное число, которое невозможно представить в виде суммы элементов массива C++
C++ Найти минимальное количество купюр, которое необходимо использовать, чтобы выдать сумму в n гривен
Определить минимальное количество монет, которое должно находиться в автомате, чтобы всем хватило сдачи C++
Найти минимальное количество шариков, которое необходимо перекрасить, чтобы все шарики были одного цвета C++
Посчитать в файле количество нулевых байт и различных байт C++
C++ Определить, сколько пар (положительное число, отрицательное число) находятся в начале массива
C++ Умножить каждое число на первое отрицательное число. Добавив к каждому числу половину последнего отрицательного числа

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Toshkarik
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
18.05.2013, 22:47     Минимальное количество байт, которое займёт отрицательное число #2
SDmaN, результат сдвига целого со знаком машиннозависим. В данном случае все новые биты принимают значение знакового ( старшего ) бита, сам он никуда не сдвигается. В итоге у Вас получается 11111111 11111111.
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru