Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.54/35: Рейтинг темы: голосов - 35, средняя оценка - 4.54
0 / 0 / 0
Регистрация: 25.04.2011
Сообщений: 12

Замена бит в числе формата float

25.04.2011, 18:51. Показов 7312. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!
Помогите, пожалуйста, с лабораторной работой.
Задача следующая:
Вводим с клавы десятичное число формата float.
Далее на экран надо вывести переведенное это число в двоичный код.
После чего ввести 3 числа (первое и второе число могут быть от 0 до 31,т.к. бит всего 32, а третье число 0 или 1)
И заменить с Х1 по Х2 бит нулями или единицами.
Чтоб было понятнее пример:
ввели какое-нибудь число и на экран вывелось
01000111100001 (короткий пример, не 32 бита)
далее вводим 5 и 8. а также 0
и на экране после ввода и преобразования видим:
01000000000001

Надеюсь суть понятна
P.S. Программируем мы на лабах в Си, не в Си++
P.P.S. Первую часть я написал сам (перевод числа из десятичной формы в двоичную, препод одобрил)
вот эта часть:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
#include <conio.h>
void  main(void)
 {
 clrscr();
 float m;
 int i;
 long *z;
 scanf("%f",&m);
 printf("Vy vveli chislo m=%.2f\n",m);
 z=(long*)&m;
 for(i=0;i<32;i++)
 {
 printf("%d",(*z)>>(31-i)&1);
 }
 getch();
 }
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.04.2011, 18:51
Ответы с готовыми решениями:

Сделать в числе n циклическую перестановку четных бит на k бит вправо
Написать программу, которая позволит ввести два числа n и k типа ulong с клавиатуры, напечатать их на дисплее, и используя битовые операции...

Преобразовать 2 регистра 16 бит в 32 бита float
Подскажите, по modbus принимаю 2 регистра 16 бит, их необходимо преобразовать в 32 бита float?

Перестановка бит в числе
Необходимо переставить биты в числе, не понимаю как это сделать. Задание: переставить первый и четвертый бит, пятый и восьмой.

22
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
25.04.2011, 20:02
Ну вообще к вещественным числа битовые операции проводить неправильно Все равно в итоге используется грязный хак, с приведением к целочисленному указателю... Поэтому я приведу пример с целочисленными, а там уж разберетесь, в общем я просто оставлю это здесь...
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
34
#include <stdio.h>
#include <limits.h>
 
int main() {
    int i;                      /* счетчик */
    int low = 12;               /* младший и старшиий бит, */
    int high = 24;              /* между которыми должна происходить замена значений */
    int value = 1;              /* заполнитель, 0 или 1 */
 
    unsigned x = 0xFF0F0F0F;    /* исходное число */
    
    /* вывод исходного числа в двоичном виде */
    for (i = 32 - 1; i != 0; --i) {
        printf ("%d", (x >> i) & 1);
    }
 
    printf ("\n");
 
    /* вычисление битовой маски и  */
    /* применение ее к исходному числу */
    /* это просто магия */
    if (value == 1)
        x |= (0xFFFFFFFF << (low - 1)) & (0xFFFFFFFF >> (32 - high));
    if (value == 0)
        x &= (0xFFFFFFFF << (low - 1)) ^ (0xFFFFFFFF >> (32 - high));
    
    /* вывод измененного числа */
    for (i = 32 - 1; i != 0; --i) {
        printf ("%d", (x >> i) & 1);
    }
 
    printf ("\n");
    return 0;
}
2
0 / 0 / 0
Регистрация: 25.04.2011
Сообщений: 12
25.04.2011, 20:19  [ТС]
Спасибо, буду разбираться!
Только что это значит
Цитата Сообщение от fasked Посмотреть сообщение
unsigned x = 0xFF0F0F0F;
?
хотя бы в двух словах
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
25.04.2011, 20:57
Цитата Сообщение от Andrei_Ok Посмотреть сообщение
Спасибо, буду разбираться!
Только что это значит ?
хотя бы в двух словах
беззнаковое целое в шестнадцатеричной системе
1
0 / 0 / 0
Регистрация: 25.04.2011
Сообщений: 12
25.04.2011, 21:03  [ТС]
Спасибо!)
Разбираюсь с лабой
0
0 / 0 / 0
Регистрация: 25.04.2011
Сообщений: 12
01.05.2011, 21:46  [ТС]
а как поменять цвет тех битов которые мы поменяли ?
не всего выводимого числа, а именно тех бит которые заменили
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
01.05.2011, 23:24
Цитата Сообщение от Andrei_Ok Посмотреть сообщение
а как поменять цвет тех битов которые мы поменяли ?
какой цвет?
0
0 / 0 / 0
Регистрация: 25.04.2011
Сообщений: 12
01.05.2011, 23:46  [ТС]
постараюсь объяснить.
когда мы выводим уже преобразованное число то цвет тех символов что мы заменили будет например красный...
чтоб было видно где была замена
т.е. было например 000111110001110000
а стало 000111111111110000
и при выводе те "111" которые заменили "000" буду красными а остальные обычным цветом...
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
01.05.2011, 23:50
Стандартными средствами языка это сделать невозможно, только с помощью сторонних библиотек.
1
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
01.05.2011, 23:56
Цитата Сообщение от Andrei_Ok Посмотреть сообщение
а как поменять цвет тех битов которые мы поменяли ?
не всего выводимого числа, а именно тех бит которые заменили
Если работаешь в Windows, то посмотри MSDN по консольным функциям WinAPI - там есть функция для изменения цвета выводимых в консоль сообщений...
2
0 / 0 / 0
Регистрация: 25.04.2011
Сообщений: 12
02.05.2011, 00:04  [ТС]
Спасибо.
Спрошу тогда препода чтоб он сам при мне это сделал)
Посмотрю как он выкрутится
0
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
02.05.2011, 00:10
Если среда от Борланд, то в conio.h есть функции... Точно не помню, но вроде типа textcolor() или что-то похожее...
1
0 / 0 / 0
Регистрация: 25.04.2011
Сообщений: 12
02.05.2011, 00:16  [ТС]
textcolor такая функция есть...
цвет меняется...
но меняется цвет всех выводимых символов... как сделать чтоб цвет менялся только тех символов что были изменены в ходе работы программы я не знаю
0
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
02.05.2011, 00:20
Нужно textcolor() вызывать в цикле для каждого символа в отдельности. В принципе, каждый символ можно своим цветом вывести.
А у вас надо просто в цикле проверять:
если x1<i<x2? то цвет один, а иначе - другой
0
0 / 0 / 0
Регистрация: 25.04.2011
Сообщений: 12
02.05.2011, 00:27  [ТС]
пробовал, не пашет)
может не так цикл задавал...
ладно, завтра на свежую голову попробую
Всем спасибо
0
0 / 0 / 0
Регистрация: 25.04.2011
Сообщений: 12
28.05.2011, 00:06  [ТС]
И вот снова я с вопросом
препод дал небольшое дополнение к этой проге)

Итак,вопрос: каким образом перевести из двоичной системы в десятичную посредством логических смещений?
Суть придирки препода в том, что ему надо чтоб уже преобразованный двоичный код вывести десятичным числом, чтобы показать ему что мы действительно заменяли биты, а не просто что-то там намухлевали

чтоб было понятно что мне надо узнать покажу пример:
ввели число
преобразовали его в двоичный код
0100001110000111110000
затем заменили биты,получили
0100001110000000000000
и теперь вот тот уже преобразованный код надо вывести как десятичное число...
0
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
28.05.2011, 00:46
ввели число
преобразовали его в двоичный код
0100001110000111110000
затем заменили биты,получили
0100001110000000000000
и теперь вот тот уже преобразованный код надо вывести как десятичное число...
Вводим
Меняем
Выводим: cout << P << endl;
P - это имя переменной, где биты меняли...
0
0 / 0 / 0
Регистрация: 25.04.2011
Сообщений: 12
28.05.2011, 12:40  [ТС]
Извините,а можно пояснить, пожалуйста, что сие означает?
cout << P << endl;
0
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
28.05.2011, 13:55
Цитата Сообщение от Andrei_Ok Посмотреть сообщение
Извините,а можно пояснить, пожалуйста, что сие означает?
cout << P << endl;
C
1
printf("%d\n", P);
0
0 / 0 / 0
Регистрация: 25.04.2011
Сообщений: 12
28.05.2011, 15:16  [ТС]
Т.е. сначала
cout << P << endl;
А потом printf ? И что значат cout и endl?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.05.2011, 15:16
Помогаю со студенческими работами здесь

Взять n-ный бит в числе
Я хочу делать некоторые операции с битами, и мне нужно взять n-ый бит в числе. Как это можно сделать?

Скольки бит выделяется в float и double под целую часть?
Подскажите пожалуйста, сколько бит выделяется в float и double под целую часть?

Подсчитать количество нулевых бит в числе
Занести числа в память 102, 26, 62, 127 Подсчитать количество нулевых бит в числе. тема &quot;Изучение логических команд и...

Найти количество единиц в числе с 5 по 10 бит
Ввести целое число A и посчитать, сколько единиц в числе с 5 по 10 бит, включая эти биты.

Подсчитать число единичных бит в числе
Помогите пожалуйста решить задание Подсчитать число единичных бит в числе размера CX байт, находящегося по адресу SI. Результат...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru