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

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

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

Author24 — интернет-сервис помощи студентам
Доброго времени суток!
Помогите, пожалуйста, с лабораторной работой.
Задача следующая:
Вводим с клавы десятичное число формата 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.04.2011, 18:51
Ответы с готовыми решениями:

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

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

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

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

22
Эксперт С++
5043 / 2622 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 1
25.04.2011, 20:02 2
Ну вообще к вещественным числа битовые операции проводить неправильно Все равно в итоге используется грязный хак, с приведением к целочисленному указателю... Поэтому я приведу пример с целочисленными, а там уж разберетесь, в общем я просто оставлю это здесь...
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  [ТС] 3
Спасибо, буду разбираться!
Только что это значит
Цитата Сообщение от fasked Посмотреть сообщение
unsigned x = 0xFF0F0F0F;
?
хотя бы в двух словах
0
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
25.04.2011, 20:57 4
Цитата Сообщение от Andrei_Ok Посмотреть сообщение
Спасибо, буду разбираться!
Только что это значит ?
хотя бы в двух словах
беззнаковое целое в шестнадцатеричной системе
1
0 / 0 / 0
Регистрация: 25.04.2011
Сообщений: 12
25.04.2011, 21:03  [ТС] 5
Спасибо!)
Разбираюсь с лабой
0
0 / 0 / 0
Регистрация: 25.04.2011
Сообщений: 12
01.05.2011, 21:46  [ТС] 6
а как поменять цвет тех битов которые мы поменяли ?
не всего выводимого числа, а именно тех бит которые заменили
0
Эксперт С++
5043 / 2622 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 1
01.05.2011, 23:24 7
Цитата Сообщение от Andrei_Ok Посмотреть сообщение
а как поменять цвет тех битов которые мы поменяли ?
какой цвет?
0
0 / 0 / 0
Регистрация: 25.04.2011
Сообщений: 12
01.05.2011, 23:46  [ТС] 8
постараюсь объяснить.
когда мы выводим уже преобразованное число то цвет тех символов что мы заменили будет например красный...
чтоб было видно где была замена
т.е. было например 000111110001110000
а стало 000111111111110000
и при выводе те "111" которые заменили "000" буду красными а остальные обычным цветом...
0
Эксперт С++
5043 / 2622 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 1
01.05.2011, 23:50 9
Стандартными средствами языка это сделать невозможно, только с помощью сторонних библиотек.
1
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
01.05.2011, 23:56 10
Цитата Сообщение от Andrei_Ok Посмотреть сообщение
а как поменять цвет тех битов которые мы поменяли ?
не всего выводимого числа, а именно тех бит которые заменили
Если работаешь в Windows, то посмотри MSDN по консольным функциям WinAPI - там есть функция для изменения цвета выводимых в консоль сообщений...
2
0 / 0 / 0
Регистрация: 25.04.2011
Сообщений: 12
02.05.2011, 00:04  [ТС] 11
Спасибо.
Спрошу тогда препода чтоб он сам при мне это сделал)
Посмотрю как он выкрутится
0
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
02.05.2011, 00:10 12
Если среда от Борланд, то в conio.h есть функции... Точно не помню, но вроде типа textcolor() или что-то похожее...
1
0 / 0 / 0
Регистрация: 25.04.2011
Сообщений: 12
02.05.2011, 00:16  [ТС] 13
textcolor такая функция есть...
цвет меняется...
но меняется цвет всех выводимых символов... как сделать чтоб цвет менялся только тех символов что были изменены в ходе работы программы я не знаю
0
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
02.05.2011, 00:20 14
Нужно textcolor() вызывать в цикле для каждого символа в отдельности. В принципе, каждый символ можно своим цветом вывести.
А у вас надо просто в цикле проверять:
если x1<i<x2? то цвет один, а иначе - другой
0
0 / 0 / 0
Регистрация: 25.04.2011
Сообщений: 12
02.05.2011, 00:27  [ТС] 15
пробовал, не пашет)
может не так цикл задавал...
ладно, завтра на свежую голову попробую
Всем спасибо
0
0 / 0 / 0
Регистрация: 25.04.2011
Сообщений: 12
28.05.2011, 00:06  [ТС] 16
И вот снова я с вопросом
препод дал небольшое дополнение к этой проге)

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

чтоб было понятно что мне надо узнать покажу пример:
ввели число
преобразовали его в двоичный код
0100001110000111110000
затем заменили биты,получили
0100001110000000000000
и теперь вот тот уже преобразованный код надо вывести как десятичное число...
0
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
28.05.2011, 00:46 17
ввели число
преобразовали его в двоичный код
0100001110000111110000
затем заменили биты,получили
0100001110000000000000
и теперь вот тот уже преобразованный код надо вывести как десятичное число...
Вводим
Меняем
Выводим: cout << P << endl;
P - это имя переменной, где биты меняли...
0
0 / 0 / 0
Регистрация: 25.04.2011
Сообщений: 12
28.05.2011, 12:40  [ТС] 18
Извините,а можно пояснить, пожалуйста, что сие означает?
cout << P << endl;
0
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
28.05.2011, 13:55 19
Цитата Сообщение от Andrei_Ok Посмотреть сообщение
Извините,а можно пояснить, пожалуйста, что сие означает?
cout << P << endl;
C
1
printf("%d\n", P);
0
0 / 0 / 0
Регистрация: 25.04.2011
Сообщений: 12
28.05.2011, 15:16  [ТС] 20
Т.е. сначала
cout << P << endl;
А потом printf ? И что значат cout и endl?
0
28.05.2011, 15:16
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.05.2011, 15:16
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru