Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/29: Рейтинг темы: голосов - 29, средняя оценка - 4.76
1 / 1 / 0
Регистрация: 10.03.2012
Сообщений: 120

Преобразовать целые числа в битовую посследовательность

30.01.2013, 20:28. Показов 6088. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется в файле посследовательность целых чисел X1,X2,X3,X4 unsigned long int, расположенных построчно. Нужно преобразовать эти целые числа в битовую посследовательность x1 1, x1 2, x1 3, x1 4, x1 5, ..., x1 31, x1 32, x2 1, x2 2, x2 3, x2 4, x2 5, ..., x2 31, x2 32, x3 1, ... (где x1 1 – младший бит первого числа, x2 32 – старший (32-й) бит второго числа).
Не понимаю как это осуществить Перевести сначала числа в 2-ую систему счисления, а потом как?

Добавлено через 1 час 46 минут
help хотя-бы подскажите в каком направлении двигаться
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.01.2013, 20:28
Ответы с готовыми решениями:

Преобразовать строки в целые числа, просуммировать и вывести сумму 4 значений
Напишите программу, которая вводит 4 строки, представляющие целые значения, преобразует строки в целые числа, суммирует и выводит сумму 4...

Задана строка, содержащая целые числа (максимум 15 чисел). Упорядочить целые числа в строке по убыванию.
Задана строка, содержащая целые числа (максимум 15 чисел). Упорядочить целые числа в строке по убыванию. должно выглядеть что то...

Даны целые массивы А[5], В[5] и значения R и F. Каждый массив преобразовать по правилу:
Даны целые массивы А, В и значения R и F. Каждый массив преобразовать по правилу: если отрицательных элементов в массиве больше 2, то...

15
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
30.01.2013, 20:52
Как вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
#include <algorithm>
#include <iterator>
#include <vector>
#include <bitset>
 
template<size_t s>
std::bitset<s> & reversebits(std::bitset<s> & bs){
    bool temp;
    for(size_t i=0,size=bs.size();i<size/2;++i){
        temp=bs[i];
        bs[i]=bs[size-i-1];
        bs[size-i-1]=temp;
    }
    return bs;
}
 
 
int main(){
    std::vector<unsigned long int> vec;
    vec.push_back(255);
    vec.push_back(65525);
    vec.push_back(3243246);
    std::bitset<sizeof(unsigned long int)*8> outbit;
    
    for(int i=0;i<vec.size();++i){
        outbit=vec[i]; 
        std::cout<<std::fixed<<reversebits(outbit);
    }
    std::cout<<std::endl;
}
0
1 / 1 / 0
Регистрация: 10.03.2012
Сообщений: 120
30.01.2013, 21:20  [ТС]
Цитата Сообщение от Croessmah Посмотреть сообщение
Как вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
#include <algorithm>
#include <iterator>
#include <vector>
#include <bitset>
 
template<size_t s>
std::bitset<s> & reversebits(std::bitset<s> & bs){
    bool temp;
    for(size_t i=0,size=bs.size();i<size/2;++i){
        temp=bs[i];
        bs[i]=bs[size-i-1];
        bs[size-i-1]=temp;
    }
    return bs;
}
 
 
int main(){
    std::vector<unsigned long int> vec;
    vec.push_back(255);
    vec.push_back(65525);
    vec.push_back(3243246);
    std::bitset<sizeof(unsigned long int)*8> outbit;
    
    for(int i=0;i<vec.size();++i){
        outbit=vec[i]; 
        std::cout<<std::fixed<<reversebits(outbit);
    }
    std::cout<<std::endl;
}
А можете обьяснить посследовательно как он работает? Не очень понятно
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
30.01.2013, 22:08
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>
#include <algorithm>
#include <iterator>
#include <vector>
#include <bitset>
 
//Функция переворачивает переданный bitset и возвращает ссылку не него же
template<size_t s>
std::bitset<s> & reversebits(std::bitset<s> & bs){
    bool temp;
    for(size_t i=0,size=bs.size();i<size/2;++i){//Проходим по первой половине массива
         //Меняем местами элементы (первый с последним, второй с предпоследним и .т.д)
        temp=bs[i];
        bs[i]=bs[size-i-1];
        bs[size-i-1]=temp;
    }
    return bs;
}
 
 
int main(){
    std::vector<unsigned long int> vec;
    vec.push_back(255);//Записываем в вектор три числа
    vec.push_back(65525);
    vec.push_back(3243246);
    std::bitset<sizeof(unsigned long int)*8> outbit;//битовый массив из STL
    
    for(int i=0;i<vec.size();++i){//Проходим по всем элементав вектора
        outbit=vec[i]; //Пихаем текущее значение в векторе в bitset
        std::cout<<std::fixed<<reversebits(outbit);//Переворачиваем элементы в Bitset и выводим содержимое в поток cout
    }
    std::cout<<std::endl;
}
1
1 / 1 / 0
Регистрация: 10.03.2012
Сообщений: 120
30.01.2013, 23:55  [ТС]
К сожалению с изучаю только год и не владею такими сложными вещами поэтому и непонятно

Добавлено через 22 минуты
А нельзя как-нибудь попроще представить это код? чтоли ближе к сишному?

Добавлено через 59 минут
Если бы можно было представить это без векторов,,потоков, а через циклы и функции я бы всё поняла
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
31.01.2013, 02:27
Цитата Сообщение от melanu Посмотреть сообщение
чтоли ближе к сишному?
Так?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <cstdio>
 
void showbinary(unsigned long int x){
    size_t size=sizeof(x)*8;
    for(size_t i=0;i<size;++i,x/=2)
        printf("%d",x%2);
}
 
int main(){
    showbinary(255);
    showbinary(32423);
    showbinary(38297498);
    printf("\nPress enter");
    getchar();
}
1
 Аватар для palva
4276 / 2969 / 692
Регистрация: 08.06.2007
Сообщений: 9,922
Записей в блоге: 4
31.01.2013, 04:19
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <stdio.h>
 
const int n=10;
long int a[n]={4,2,1,32,128,4,4,4,4,4};
long int b[n]={0,0,0,0,0,0,0,0,0,0};
int main() {
    int i, k, m;
    unsigned __int64 buff,temp;
    unsigned int bt;
    buff=0;
    k=0;
    for(i=0; i<n; i++) {
        if(buff & 0xFFFFFFFF80000000) {
            b[k++] = buff & 0xFFFFFFFF;
            buff >>= 32;
        }
        for(m=32, bt = 0x80000000; m > 0 && (bt & buff) == 0; m--, bt >>= 1);
        temp = a[i];
        temp <<= m;
        buff |= temp;
    }
    b[k++] = buff & 0xFFFFFFFF;
    buff >>= 32;
    if(buff) b[k++] = buff;
    for(i=0; i<k; i++) printf("%08X\n", b[i]);
    return 0;
}
0
1 / 1 / 0
Регистрация: 10.03.2012
Сообщений: 120
31.01.2013, 12:04  [ТС]
Цитата Сообщение от Croessmah Посмотреть сообщение
Так?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <cstdio>
 
void showbinary(unsigned long int x){
    size_t size=sizeof(x)*8;
    for(size_t i=0;i<size;++i,x/=2)
        printf("%d",x%2);
}
 
int main(){
    showbinary(255);
    showbinary(32423);
    showbinary(38297498);
    printf("\nPress enter");
    getchar();
}
Да спасибо огромное теперь более понятным языком написано Получается вот эти вот числа: 255 32423 38297498 она переводит в битовую посследовательность? я правильно понимаю?

Добавлено через 20 минут
Цитата Сообщение от palva Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <stdio.h>
 
const int n=10;
long int a[n]={4,2,1,32,128,4,4,4,4,4};
long int b[n]={0,0,0,0,0,0,0,0,0,0};
int main() {
    int i, k, m;
    unsigned __int64 buff,temp;
    unsigned int bt;
    buff=0;
    k=0;
    for(i=0; i<n; i++) {
        if(buff & 0xFFFFFFFF80000000) {
            b[k++] = buff & 0xFFFFFFFF;
            buff >>= 32;
        }
        for(m=32, bt = 0x80000000; m > 0 && (bt & buff) == 0; m--, bt >>= 1);
        temp = a[i];
        temp <<= m;
        buff |= temp;
    }
    b[k++] = buff & 0xFFFFFFFF;
    buff >>= 32;
    if(buff) b[k++] = buff;
    for(i=0; i<k; i++) printf("%08X\n", b[i]);
    return 0;
}
Пробовала этот код но выдаёт много warning
3\main.c(43): error #2001: Syntax error: expected ';' but found 'buff'.
3\main.c(43): error #2048: Undeclared identifier 'buff'.
3\main.c(43): error #2048: Undeclared identifier 'temp'.
3\main.c(50): warning #2131: Shifting an 'int' by 32 bits is undefined.
3\main.c(58): warning #2131: Shifting an 'int' by 32 bits is undefined.
3\main.c(43): warning #2114: Local '__int64' is not referenced.
0
 Аватар для palva
4276 / 2969 / 692
Регистрация: 08.06.2007
Сообщений: 9,922
Записей в блоге: 4
31.01.2013, 12:09
Цитата Сообщение от melanu Посмотреть сообщение
выдаёт много warning
Это не warning, это ошибки. В вашем компиляторе имя типа int64 не такое как в Visual Studio. Попробуйте убрать одно подчеркивание, или читайте документацию к вашему компилятору.
0
1 / 1 / 0
Регистрация: 10.03.2012
Сообщений: 120
31.01.2013, 12:13  [ТС]
Цитата Сообщение от palva Посмотреть сообщение
Это не warning, это ошибки. В вашем компиляторе имя типа int64 не такое как в Visual Studio. Попробуйте убрать одно подчеркивание, или читайте документацию к вашему компилятору.
Минутку, попробую!
0
 Аватар для palva
4276 / 2969 / 692
Регистрация: 08.06.2007
Сообщений: 9,922
Записей в блоге: 4
31.01.2013, 12:27
warning должен быть один в 24 строке. Возможная потеря точности. Его можно избежать, если написать так:
C++
1
    if(buff) b[k++] = (long) buff;
Но можно и не обращать внимания на этот warning.

Добавлено через 12 минут
Еще заметил ошибку свежим взглядом. `long' надо всюду заменить на `unsigned long'. Эта ошибка может проявляться при больших исходных числах.
0
1 / 1 / 0
Регистрация: 10.03.2012
Сообщений: 120
31.01.2013, 12:28  [ТС]
Да вроде нормально, только я непонимаю что это за числа и откуда они взялись 0xFFFFFFFF80000000 0xFFFFFFFF 0x80000000 и buff - это временное хранилище?
0
 Аватар для palva
4276 / 2969 / 692
Регистрация: 08.06.2007
Сообщений: 9,922
Записей в блоге: 4
31.01.2013, 12:32
Это маски для выделения битов. buf временное хранилище. Туда добавляются предварительно сдвинутые на нужное число битов исходные числа. По мере заполнения младшие 32 бита уходят в результирующий массив b, а хранилище сдвигается вправо, выталкивая эти биты и освобождая место для новых поступлений массива a.
0
1 / 1 / 0
Регистрация: 10.03.2012
Сообщений: 120
31.01.2013, 12:36  [ТС]
Я что-то про маски сразу и подумала А если мне нужно считывать из файла а не из массива а[n]? И откуда мы знаем на сколько нужно сдвигать биты?
0
 Аватар для palva
4276 / 2969 / 692
Регистрация: 08.06.2007
Сообщений: 9,922
Записей в блоге: 4
31.01.2013, 12:44
Цитата Сообщение от melanu Посмотреть сообщение
А если мне нужно считывать из файла а не из массива
Тогда нужно массив предварительно ввести. При этом будет определен размер n.
Цитата Сообщение от melanu Посмотреть сообщение
И откуда мы знаем на сколько нужно сдвигать биты?
Это делает длинный цикл for. Он, двигаясь вправо, ищет первый ненулевой бит в хранилище. Этот бит будет старшим битом предыдущего числа a. Следующее число должно сдвинуться на m, чтобы его младший бит следовал за старшим битом предыдущего числа.
1
1 / 1 / 0
Регистрация: 10.03.2012
Сообщений: 120
31.01.2013, 12:46  [ТС]
аааа всё теперь ясно! спасибки!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
31.01.2013, 12:46
Помогаю со студенческими работами здесь

Даны целые числа р и q. Получить все делители числа q, взаимно простые с р
Получить все делители числа q, взаимно простые с р.

Дано два числа А и В (А<В). Вывести в порядке увеличения все целые числа
Дано два числа А и В (А&lt;В). Вывести в порядке увеличения все целые числа, расположеные между А и В(не включая чисед А и В), а также...

Даны целые числа, удалить все числа со значением максимального из них
Даны целы числа х1,...,xn . удалить все числа со значением max(х1,...,xn) Не могу найти ошибку... #include&lt;iostream&gt; using...

Даны целые числа р и q. Получить все делители числа q, взаимно простые с р.
Даны целые числа р и q. Получить все делители числа q, взаимно простые с р. Решите на С++. Заранее спасибо!

Даны два целых числа M но N. Вывести все целые числа из промежутка [M,n]
Даны два целых числа M но N. Вывести все целые числа из промежутка , которые делящиеся 2, но не делящиеся на 4, а также количество K этих...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru