Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.02.2013, 16:13   #1
Alendorff
Форумчанин
 
Аватар для Alendorff
 
Регистрация: 04.06.2011
Сообщений: 104
По умолчанию C++, Преобразовать массив из нулей и единиц в двоичное число

Здравствуйте, пожалуйста ответьте на мой простой вопрос:

Пусть у меня есть массив:
A={1,0,1,0,1,0,0,0,0,1,1}
Нужно перевести его в двоичное число:
unsigned int a=10101000011
Как это сделать?

Спасибо.
Alendorff вне форума Ответить с цитированием
Старый 11.02.2013, 16:21   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
unsigned int a=10101000011
Вот это - ни разу не двоичное число 10101000011(2). За вычетом этого,
Код:
int result = 0;
for(int i=0; i<length; ++i)
  result = result*2 + A[i];
Abstraction вне форума Ответить с цитированием
Старый 11.02.2013, 17:51   #3
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Код:
#include <iostream>
int f(bool *a, int n) {
  int val(0);
  for (int i = 0; i < n; ++i)
    (val <<= 1) |= a[i];
  return val;
}
    
int main() {
  bool a[] = {0, 0, 1, 1};
  int val = f(a, 4);
  std::cout << std::hex << val;
}
rrrFer вне форума Ответить с цитированием
Старый 11.02.2013, 17:53   #4
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

(int)true - это не обязательно 1, насколько помню.
Abstraction вне форума Ответить с цитированием
Старый 11.02.2013, 17:54   #5
Alendorff
Форумчанин
 
Аватар для Alendorff
 
Регистрация: 04.06.2011
Сообщений: 104
По умолчанию

Пока ждал написал так:
Код:
for (int i=0; i<n; i++)
        a=a+pow(2,n-1-i)*A[i];
В принципе работает как замышлялось...
Но всё равно всем спасибо за ответы.
Alendorff вне форума Ответить с цитированием
Старый 11.02.2013, 17:56   #6
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
(int)true - это не обязательно 1, насколько помню.
true - любое число кроме нуля
а кто тут кастует bool в int?
rrrFer вне форума Ответить с цитированием
Старый 11.02.2013, 17:59   #7
Alendorff
Форумчанин
 
Аватар для Alendorff
 
Регистрация: 04.06.2011
Сообщений: 104
По умолчанию

Цитата:
Сообщение от Abstraction Посмотреть сообщение
Вот это - ни разу не двоичное число 10101000011(2). За вычетом этого,
Код:
int result = 0;
for(int i=0; i<length; ++i)
  result = result*2 + A[i];
Массив А={1,0,1,0}
i=0 result=0*2+1
i=1 result=1*2+0
i=2 result=2*2+1
i=3 result=5*2+0
...
Хм... сначала не понял, но теперь увидел ) Считается в десятичное число... прикольно.
Alendorff вне форума Ответить с цитированием
Старый 11.02.2013, 18:38   #8
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
true - любое число кроме нуля
а кто тут кастует bool в int?
Преобразует компилятор, при вычислении |=.
Код:
(val <<= 1) |= a[i];
Ваш код? a имеет тип bool*. a[i] - bool. Вопрос: чему станет равно val, если изначально оно было 0, а a[i] - true? Насколько помню, правильный ответ: а как решили разработчики компилятора, но отнюдь не обязательно 1.
Abstraction вне форума Ответить с цитированием
Старый 11.02.2013, 19:44   #9
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
Ваш код? a имеет тип bool*. a[i] - bool. Вопрос: чему станет равно val, если изначально оно было 0, а a[i] - true? Насколько помню, правильный ответ: а как решили разработчики компилятора, но отнюдь не обязательно 1.
Вцелом да, я затупил. Еще минуту назад думал что при кастовании true в int получим неопреденность.

Заглянул в Страуструпа, цитирую "по определению, true имеет значение 1 при преобразовании к целому типу, а false - 0. И наоборот, целые можно неявно преобразовать в логические значения, при этом ненулевые преобразуются в true, а ноль - f афдыу"

-------------
хотя, может быть что-то изменилось, книжка 99 года )
rrrFer вне форума Ответить с цитированием
Старый 11.02.2013, 23:18   #10
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
"по определению, true имеет значение 1 при преобразовании к целому типу, а false - 0"
А, ну тогда здорово, так можно. Хотя на старых компиляторах всё равно не советовал бы категорически.
Abstraction вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дан массив из 9 байт расматривая его как массив 72 бит подсчитать число нулей в этом массиве. noob asm Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 16.04.2012 19:04
массив из единиц и нулей dodomenos Паскаль, Turbo Pascal, PascalABC.NET 4 03.03.2011 00:08
Найти байтс наибольшим числом единиц и найти байт с наибольшим чилом нулей. Найти разность число единиц м Beren42 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 14.12.2010 17:44
работа с массивом нулей и единиц Rusl92 Помощь студентам 12 15.11.2009 16:20
Получите последовательность b1...bn из нулей и единиц Я_Студент Паскаль, Turbo Pascal, PascalABC.NET 2 04.07.2008 12:40