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

Системы счисления - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Инструмент выделения в графическом редакторе http://www.cyberforum.ru/cpp-beginners/thread580772.html
Добрый день! Помогите реализовать инструмент выделения в растровом графическом редакторе - нужно чтоб можно было масштабировать выделенную область. Win Api
C++ Задачка на explicit //Point.h #ifndef POINT_H #define POINT_H #include <iostream> #include <string> using std::ostream; class Point { http://www.cyberforum.ru/cpp-beginners/thread580742.html
Ошибка: string subscript out of range C++
При запуске выдает ошибку "string subscript out of range". Подскажите, в чем проблема. #include "stdafx.h" #include <iostream> #include <stdio.h> #include <string.h> using namespace std; void main( void ) {
C++ Минимальная длина слова в предложении
Здравствуйте, мне надо вывести слово минимальной длины из введенного предложения, вот получилось пока только это, в итоге выводит только длинну слов через пробел(f). Наверное надо эту длину слов забить в динамический массив а потом вывести оттуда минимальный элемент, так ли это?. Спасибо #include <iostream> #include <stdio.h> #define dl 80 using namespace std; int main() { char s;
C++ Вывести индекс элемента массива http://www.cyberforum.ru/cpp-beginners/thread580679.html
В программа считает сумму строк и сумму столбиков в двумерном массиве. Суммы одинаковых за номером строк и столбцов сравниваются и, если они совпали, то вывести сумму. Мне необходимо вывести и индекс той строки или столбца ( так как массив n*n), где суммы совпали.
C++ Сортировка ест. слиянием Задача : Отсортировать текстовый файл, содержащий вещественные числа, в порядке убывания методом естественного слияния. подробнее

Показать сообщение отдельно
rakota
35 / 35 / 1
Регистрация: 05.02.2012
Сообщений: 76
21.05.2012, 20:53     Системы счисления
Я про свою функцию расскажу.
Собственно, код с коментариями
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int* toBin(int value) /*функция получает цифру, возвращает указатель на динамически созданный
массив. Может быть вы этого не проходили ещё, но это самый удобный способ. Если нужен другой, то могу переделать.*/
{
    int* result = new int[16]; //создаётся динамический массив из 16 элементов int
    int j = 0; //счётчик цикла. Вообще его можно вставить в объявление цикла for, но у меня так не компилируется
    for(unsigned int i = pow(2,15); i >= 1; i >>= 1)/*pow(int a,int b) возвращает a в степени b, следовательно начальное значение цикла будет 2^15,цикл будет работать, пока i больше или равно единице, >>= это операция побитового сдвига вправо с присваиванием */
    {
        if(value & i) result[j] = 1; /*здесь, с помощью операции побитового И, сравнивается 
введённое значение и переменная i (об этом ниже), затем j-ому элементу массива присваивается
или 1, или 0 */
        else result[j] = 0;
        ++j; // увеличиваем счётчик
    }
    return result; //возвращаем указатель на наш массив
}


Что происходит на итерациях цикла

Изначально переменной i присваивается значение 16284 (если я не ошибаюсь, а я, скорее всего, ошибаюсь ), что значит 100000000000000 в двоичной системе. Затем к i применяется операция >>= . Что при этом происходит:
Код
1. 100000000000000
2. 010000000000000
3. 001000000000000
...
15. 000000000000001
Затем, на каждой итерации цикла, эти значения сравниваются с двоичным значением value при помощи операции побитового И(&), например:
Код
010000000000000
010001000000101
-----------------
010000000000000
и если получившееся значение не равно 0, то в j-ный элемент массива пишется 1, иначе 0.

Ну как-то так

И ещё, если вам нужно перевести значение в систему счисления с основанием 16, то можно сделать так:
...

C++
1
2
int value = 1027; // Ну или любое другое значение.
cout << (int*)value << endl; //шестнадцатеричное значение value
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru