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

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

Войти
Регистрация
Восстановить пароль
 
n971030
163 / 95 / 1
Регистрация: 23.01.2010
Сообщений: 1,175
#1

не получаеться преобразовать 8 ьит в 1 байт (биты в десятичное число) - C++

15.04.2012, 19:57. Просмотров 795. Ответов 3
Метки нет (Все метки)

вот код надо написать на с++ но решил на дельфи но он не работает что то как будто проскакивает последний разряд

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
const
  _SIZE = 8;
var
 m: array [0.. _SIZE - 1] of byte; 
 
procedure TForm1.Button2Click(Sender: TObject);
var
  i, r2, r3, f, n, bit: Integer;
  Result: Extended;
begin
 f:=0;
  for i:=0 to 7 do
  begin
   bit:=m[i];
   Result:=Power(bit*2, i); //bitx2^i (1*2^i)
   n:=round(Result);
   f:= f + n;
  end;
  Form1.Edit3.Text:=FloatToStr(f);
end;
некоторое описание: значит в массиве где число ячек всего 8 (начиная с 0 - 7) мы должны записать биты т.е. например
(0011 0000 = 48дес) но этот гребаный код чета не работает хотя все правильно. помогите че за лажа 3 дня мучиюсь. Проблемма вот в чем, он преобразовывает правильно числа :

00110001 -> 49
00110101 -> 53 и т.д

а числа ниже уже не праильно:

00110000 -> (должно быть: 48) выдает: 49
00101110 -> (Должно быть: 46) выдает: 47
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.04.2012, 19:57     не получаеться преобразовать 8 ьит в 1 байт (биты в десятичное число)
Посмотрите здесь:

C++ Как построить байт, если биты устанавливаются/сбрасываются через чекбоксы?
C++ Найти десятичное число
C++ как преобразовать шестнадцатеричную строку в целое десятичное число
Как из 4-х байт, составляющих число типа double, получить это число? C++
Как преобразовать число в массив байт C++
Байт в биты в файле C++
C++ Десятичное число к двоичному
Преобразовать введенное с клавиатуры двоичное восьмиразрядное число в десятичное C++
Преобразовать десятичное число в число с заданным основанием C++
Как преобразовать файл в биты (в нули и единицы), чтобы потом можно было его зашифровать в код Грея? C++
C++ Ввести целое число A. Инвертировать все биты с 4 по 8, включая эти биты. Вывести результат
Требуется двоично-десятичное число перевести в десятичное C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kuzia domovenok
1887 / 1742 / 117
Регистрация: 25.03.2012
Сообщений: 5,916
Записей в блоге: 1
15.04.2012, 20:09     не получаеться преобразовать 8 ьит в 1 байт (биты в десятичное число) #2
Очевидно, потому что ноль в нулевой степени равен единице.
Именно из-за таких неочевидностей не советую писать
C++
1
 Power(bit*2, i);
при решении этой задачи. Наверное, автор хотел написать "красиво", а вышла лажа. Лучше действовать проверенным методом и вручную вычислять степень двойки. Или, по крайней мере, вынести bit за скобки.
zss
Модератор
Эксперт С++
6180 / 5783 / 1872
Регистрация: 18.12.2011
Сообщений: 14,774
Завершенные тесты: 1
15.04.2012, 20:12     не получаеться преобразовать 8 ьит в 1 байт (биты в десятичное число) #3
C++
1
2
3
4
5
6
7
unsigned char FormByte(unsigned char m[])
{
     unsigned char byte=0;
     for(int i=0;i<8;i++)
          byte|=m[i]<<i;
     return byte;
}
n971030
163 / 95 / 1
Регистрация: 23.01.2010
Сообщений: 1,175
15.04.2012, 22:06  [ТС]     не получаеться преобразовать 8 ьит в 1 байт (биты в десятичное число) #4
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Очевидно, потому что ноль в нулевой степени равен единице.
Именно из-за таких неочевидностей не советую писать
C++
1
 Power(bit*2, i);
при решении этой задачи. Наверное, автор хотел написать "красиво", а вышла лажа. Лучше действовать проверенным методом и вручную вычислять степень двойки. Или, по крайней мере, вынести bit за скобки.
ОК ПОНЯЛ СПАСИБО ВОТ ИСПРАВИЛ ВСЕ РАБОТАЕТ!

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
var
  i, r2, r3, f, n, bit: Integer;
  Result: Extended;
begin
 f:=0;
  for i:=0 to 7 do
  begin
   bit:=m[i];
   if bit <> 0 then
   begin
 
    Result:=Power(bit*2, i); //bitx2^i (1*2^i)
   end
   else
    Result :=0;
 
   n:=round(Result);
   f:= f + n;
  end;
  Form1.Edit3.Text:=FloatToStr(f);
end;
Yandex
Объявления
15.04.2012, 22:06     не получаеться преобразовать 8 ьит в 1 байт (биты в десятичное число)
Ответ Создать тему
Опции темы

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