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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.11.2017, 12:44   #1
dimaSlon
Форумчанин
 
Регистрация: 24.06.2017
Сообщений: 160
По умолчанию Побитовые значения

Мне нужно записать для целочисленного положительного числа его бинарное представление в строке

Код:
template <typename T>
std::string ToBinary(T number)
{
	std::size_t sizeInBytes = sizeof(T);
	std::string str;
	for (int index = 0; index < sizeInBytes; ++index)
	{
		if (IsOn(number, index))
			str = std::string("1") + str;
		else
			str = std::string("0") + str;
	}
	return str;
Оно работает, но я думаю не эффективно. что можно тут улутчить?
dimaSlon вне форума Ответить с цитированием
Старый 14.11.2017, 12:51   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Я очень сильно сомневаюсь, что это работает.
waleri вне форума Ответить с цитированием
Старый 14.11.2017, 13:21   #3
dimaSlon
Форумчанин
 
Регистрация: 24.06.2017
Сообщений: 160
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Я очень сильно сомневаюсь, что это работает.
оно работает. Но Вы можете открыть онлайн дебагер и проверить. Или религия не позволяет?)))
dimaSlon вне форума Ответить с цитированием
Старый 14.11.2017, 13:34   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Учитывая, что вы на каждый БАЙТ добавляете только по ОДНОМУ значению 1/0 вместо 8 - да, не работает; вернее работает для некоторых значений.

Почему не взяли стандартный битсет и его функцию то_стринг?
p51x вне форума Ответить с цитированием
Старый 14.11.2017, 14:18   #5
dimaSlon
Форумчанин
 
Регистрация: 24.06.2017
Сообщений: 160
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Учитывая, что вы на каждый БАЙТ добавляете только по ОДНОМУ значению 1/0 вместо 8 - да, не работает; вернее работает для некоторых значений.

Почему не взяли стандартный битсет и его функцию то_стринг?
я уже переделал:
Код:
template <typename T>
std::string ToBinary(T number)
{
	std::size_t numBits = 8 * sizeof(T);
	//std::string* str = new std::string[numBits];
	std::string str;
	str.reserve(numBits);
	for (int index = 0; index < numBits; ++index)
	{
		if (IsOn(number, index))
			str = std::string("1") + str;
		else
			str = std::string("0") + str;
	}
	return str;
}
dimaSlon вне форума Ответить с цитированием
Старый 14.11.2017, 14:19   #6
dimaSlon
Форумчанин
 
Регистрация: 24.06.2017
Сообщений: 160
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Почему не взяли стандартный битсет и его функцию то_стринг?
Я не знал про него. А можно по подробнее про него?
dimaSlon вне форума Ответить с цитированием
Старый 14.11.2017, 14:23   #7
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

http://en.cppreference.com/w/cpp/uti...tset/to_string
p51x вне форума Ответить с цитированием
Старый 14.11.2017, 15:20   #8
dimaSlon
Форумчанин
 
Регистрация: 24.06.2017
Сообщений: 160
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
спасибо. но я подумал. сам если начал то уже свое норм доделаю, хоч буду знать как оно работает.
Вопрос по моему. Как можно переписать эти строки:
Код:
str = std::string("1") + str;
			str = std::string("0") + str;
а то я создаю всегда конструктор и деструктор, а как я понимаю это не очень хорошо
dimaSlon вне форума Ответить с цитированием
Старый 14.11.2017, 15:24   #9
dimaSlon
Форумчанин
 
Регистрация: 24.06.2017
Сообщений: 160
По умолчанию

Я думал так сделать:
Код:
if (IsOn(number, index))
			str = strcat(str, "1");
		else
			str = strcat(str, "0");
но... у меня не char*
dimaSlon вне форума Ответить с цитированием
Старый 14.11.2017, 15:30   #10
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Цитата:
Сообщение от dimaSlon Посмотреть сообщение
Как можно переписать эти строки
Код:
str += "1"
waleri вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С++ побитовые операции Rus5 Помощь студентам 0 28.05.2013 22:34
Побитовые операции С++ Pein95 Общие вопросы C/C++ 3 19.11.2012 14:48
Си.Побитовые операции Alina111 Visual C++ 6 24.06.2012 20:53
Побитовые Си makc101 Помощь студентам 1 11.04.2011 10:36
побитовые операции Dimarik Общие вопросы C/C++ 7 16.04.2010 19:27