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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.03.2018, 19:04   #1
dimka_shevchuk
Пользователь
 
Регистрация: 06.03.2018
Сообщений: 10
По умолчанию Определить знак и значение

Реализовать ввод целочисельного значения типа signed short. Определить знак и значение используя определение структуры данных.
Начал делать так
union
{
struct {
signed short number : 15;
signed short index : 1;
} num;
signed short word;
} Numb;
Применяю значение
Numb.word = -1767;
cout << Numb.num.index;
cout << Numb.num.number;
Но вывод не такой как бы хотелось.
Помогите разобраться
dimka_shevchuk вне форума Ответить с цитированием
Старый 06.03.2018, 20:30   #2
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Сообщение от dimka_shevchuk Посмотреть сообщение
Но вывод не такой как бы хотелось.
а чо выводится?
и чо хотелось?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 06.03.2018, 20:33   #3
dimka_shevchuk
Пользователь
 
Регистрация: 06.03.2018
Сообщений: 10
По умолчанию

ну если значение отрицательное, крайний бит слева должен быть равным единице а у меня на выводе -1. Как понимать?
dimka_shevchuk вне форума Ответить с цитированием
Старый 06.03.2018, 20:41   #4
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Сообщение от dimka_shevchuk Посмотреть сообщение
ну если значение отрицательное, крайний бит слева должен быть равным единице а у меня на выводе -1. Как понимать?
Компайлер тебя троллит. Выводи так:
Код:
printf(Numb.num.index ? "-" : "+");
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 06.03.2018, 20:52   #5
dimka_shevchuk
Пользователь
 
Регистрация: 06.03.2018
Сообщений: 10
По умолчанию

Хорошо, спасибо. Я похоже сначала сделал проверкой == -1.
Еще вопрос, надо сделать структуру данных действительного числа типа float.
Я думаю делать так же. Не подскажите более удобный вариант, с учетом того что потом мне надо будет выводить это значение побитово и отдельно знак и мантиссу.
dimka_shevchuk вне форума Ответить с цитированием
Старый 06.03.2018, 22:01   #6
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Дык всё то же самое. float - это 4 байта, double - 8 байт.
Старший бит всегда знаковый. В каких битах мантисса и экспонента - загугли, я не помню. Вот тебе ещё бонус, почитай.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 06.03.2018, 22:08   #7
dimka_shevchuk
Пользователь
 
Регистрация: 06.03.2018
Сообщений: 10
По умолчанию

Сделал вот так
Цитата:
union {
struct {
signed long mantissa : 23;
signed short order : 8;
signed short digit : 1;
}s_Float;
float number;
}Float;
Сделал вывод всего
Цитата:
cout << "Enter float number : " << endl;
cin >> Float.number;
cout << " Digit = " << Float.s_Float.digit << endl;
cout << " Order = " << Float.s_Float.order << endl;
cout << " Mantissa = " << Float.s_Float.mantissa << endl;
И вот как оно показало, что не так делаю?
Изображения
Тип файла: jpg float.JPG (11.4 Кб, 44 просмотров)
dimka_shevchuk вне форума Ответить с цитированием
Старый 06.03.2018, 22:13   #8
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Сообщение от dimka_shevchuk Посмотреть сообщение
И вот как оно показало, что не так делаю?
бонус читай.
и замени везде signed на unsigned.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 06.03.2018, 22:21   #9
dimka_shevchuk
Пользователь
 
Регистрация: 06.03.2018
Сообщений: 10
По умолчанию

Так прочитал уже. Все-равно не понимаю что не так делаю. Вроде все как надо написал.
dimka_shevchuk вне форума Ответить с цитированием
Старый 06.03.2018, 22:32   #10
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Сообщение от dimka_shevchuk Посмотреть сообщение
Так прочитал уже. Все-равно не понимаю что не так делаю. Вроде все как надо написал.
Мне ща неудобно писать демо. Часов через 12 брякни мне в личку, я у себя пошаманю. А щас спать иди. Утро вечера бодунее.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
.Определить сколько раз в декабре температура меняла знак . ANTON66 Общие вопросы Delphi 2 28.11.2015 17:23
Дана последовательность ненулевых целых чисел,оканчивающая нулем.Определить,сколько раз в этой последовательности меняеться знак.( Salomon9393 Помощь студентам 0 07.12.2012 18:59
Правильно определить знак перед строкой и в зависимости от этого выставить checked свойство Человек_Борща Общие вопросы Delphi 9 18.02.2011 01:11
Определить знак зодиака qwertyuiop12345678 Помощь студентам 4 27.10.2009 17:28
Определить, сколько раз в последовательности меняется знак Siroga35 Паскаль, Turbo Pascal, PascalABC.NET 1 22.01.2009 12:25