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

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

Восстановить пароль Регистрация
 
SDmaN
54 / 51 / 2
Регистрация: 22.07.2011
Сообщений: 436
18.05.2013, 21:45     Минимальное количество байт, которое займёт отрицательное число #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++ Напечатать минимальное число, большее 200, которое нацело делится на 17
C++ Найти минимальное количество купюр, которое необходимо использовать, чтобы выдать сумму в n гривен
C++ Напечатать минимальное число, больше 500, которое нацело делится на 47
C++ Найти отрицательное число и после отрицательное число заменить все элемент на нули
Найти минимальное количество шариков, которое необходимо перекрасить, чтобы все шарики были одного цвета C++

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

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

Текущее время: 15:06. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru