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

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

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

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

15.04.2012, 19:57. Просмотров 834. Ответов 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
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.04.2012, 19:57
Здравствуйте! Я подобрал для вас темы с ответами на вопрос не получаеться преобразовать 8 ьит в 1 байт (биты в десятичное число) (C++):

Преобразовать десятичное число в число с заданным основанием - C++
С++ решить задачу //преобразовать десятичное число в число с заданным основанием

Преобразовать введенное с клавиатуры двоичное восьмиразрядное число в десятичное - C++
Преобразовать введенное с клавиатуры восьмиразрядное двоичное число в десятичное. Буду благодарен если сделаете правильно. Если не...

как преобразовать шестнадцатеричную строку в целое десятичное число - C++
как преобразовать данную шестнадцатеричную строку в целое десятичное число (ни как не могу понять) Добавлено через 10 минут как...

Как преобразовать число в массив байт - C++
int n = 222333; // hex: 0003647D нужно получить массив байт из переменной n вида: byte m = {0x00, 0x03, 0x64 ,0x7D}; // порядок...

Ввести целое число A. Инвертировать все биты с 4 по 8, включая эти биты. Вывести результат - C++
нужна помощь в битовых операциях.Ввести целое число A. Инвертировать все биты с 4 по 8, включая эти биты. Вывести результат.

Байт в биты в файле - C++
Нашёл такую реализацию(вроде бы реализацию, я сам не знаю как она работает) превращения байта символа в биты. Но не могу понять, как собой...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 1
15.04.2012, 20:09 #2
Очевидно, потому что ноль в нулевой степени равен единице.
Именно из-за таких неочевидностей не советую писать
C++
1
 Power(bit*2, i);
при решении этой задачи. Наверное, автор хотел написать "красиво", а вышла лажа. Лучше действовать проверенным методом и вручную вычислять степень двойки. Или, по крайней мере, вынести bit за скобки.
1
zss
Модератор
Эксперт С++
6380 / 5945 / 1927
Регистрация: 18.12.2011
Сообщений: 15,264
Завершенные тесты: 1
15.04.2012, 20:12 #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;
}
0
n971030
163 / 95 / 1
Регистрация: 23.01.2010
Сообщений: 1,240
15.04.2012, 22:06  [ТС] #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;
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.04.2012, 22:06
Привет! Вот еще темы с ответами:

Требуется двоично-десятичное число перевести в десятичное - C++
Помогите пожалуйста реализовать

Как построить байт, если биты устанавливаются/сбрасываются через чекбоксы? - C++
То есть как принять значиния от этих чекбоксов я уже сделал (они записываются в отдельные переменные для каждого чекбокса) у меня вопрос...

Как преобразовать файл в биты (в нули и единицы), чтобы потом можно было его зашифровать в код Грея? - C++
Добрый день всем! У меня к вам несколько вопросов, которые касаются следующего: В институте дали задание сделать программу которая...

Десятичное число к двоичному - C++
Не могу придумать алгоритм и соответственно сделать программу. Выручайте. Вот задание: Разработать программу,которая считывает десятичное...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
15.04.2012, 22:06
Ответ Создать тему
Опции темы

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