Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.53/30: Рейтинг темы: голосов - 30, средняя оценка - 4.53
0 / 0 / 0
Регистрация: 06.02.2020
Сообщений: 38

Дополнительный код

10.02.2020, 17:55. Показов 6716. Ответов 33
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как вывести дополнительный код 16-ти разрядного числа, но не всего, а 6-ти младших разрядов ?
Должен выводится знак и десятичное число (берутся только 6 младших разрядов)!!!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.02.2020, 17:55
Ответы с готовыми решениями:

Дополнительный код с++
Добрый день, во-первых как убрать неистовые 1..1 в ответе? Я понимаю что это машинный код и таким образом определяется положительный или...

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

Арифметические операции. Дополнительный код
суть проблеммы в следующем. лаба. Операции с числами в доп. коде (доп. код - то каким способом хранятся целые числа на...

33
Параллельный Кот
 Аватар для valen10
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
11.02.2020, 00:03
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Argus19 Посмотреть сообщение
[16] это 17 символов. 16 символов числа и ноль в конце. Разве не так?
Нет, не так. 16 это и есть 16, а не 17 = 16 + 1.

Цитата Сообщение от Argus19 Посмотреть сообщение
C++
20
char num[16];                //Объявляем массив из 16 элементов
Не видите противоречия?
0
737 / 704 / 110
Регистрация: 29.05.2015
Сообщений: 4,316
11.02.2020, 06:30
Интересна, у неё получилось?
0
0 / 0 / 0
Регистрация: 06.02.2020
Сообщений: 38
11.02.2020, 07:44  [ТС]
Нет пока
0
737 / 704 / 110
Регистрация: 29.05.2015
Сообщений: 4,316
11.02.2020, 08:17
Написали уже штук 5 вариантов, как это можно сделать. Уже что-то новое сложно придумать.

Вот допустим можно написать функцию:

C
1
2
3
4
5
6
7
    short MakeDigitFrom6Bit(short k)
    {
    ....
    }
 
    short a = 0xffff;
    short x = MakeDigitFrom6Bit(a);

На вход вы подаёте 0xffff. Что должно появиться в переменной Х?
0
 Аватар для Argus19
1449 / 466 / 78
Регистрация: 24.09.2017
Сообщений: 2,551
Записей в блоге: 24
11.02.2020, 17:46
Лучший ответ Сообщение было отмечено Olgagusy как решение

Решение

Цитата Сообщение от valen10 Посмотреть сообщение
Не видите противоречия?
Почему-то нет. Массив начинается не с 1, а с 0. Так?

По теме....
Если вводится число со знаком, то:
1). если старший разряд равен нулю, число положительное и находится в прямом коде;
3). если старший разряд равен единице, то число отрицательное и уже находится в дополнительном коде.
Т.о. вводим шестнадцатиричное число и, чтобы получить 6 младших разрядов и знак, необходимо маскировать введённое число константой = 0x803F и выводить в десятичном виде.
C++
1
2
3
4
5
short a, b;
printf ("Введите число\n");
    scanf("%x", &a);                //Ввод шестнадцатиричного числа
      b = a & 0x803F;
       printf ("%d %s", b, "\n");                   //Вывод десятичного числа со знаком
Как-то так.

Добавлено через 6 минут
Olgagusy, помогло?
1
Параллельный Кот
 Аватар для valen10
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
11.02.2020, 18:00
Цитата Сообщение от Argus19 Посмотреть сообщение
Массив начинается не с 1, а с 0. Так?
В том и дело, что с 0. А число в квадратных скобках - его размер. Если выписать 16 целых чисел (индексов) подряд, начиная с 0, то какая будет последней? 0, 1, 2, ..., 14, 15. Если не верите, то вот комментарий clang при компиляции с ключом -Warray-bounds:

Code
1
2
3
4
5
6
7
8
9
10
11
12
src.cpp:29:5: warning: array index 16 is past the end of the array (which contains 16 elements) [-Warray-bounds]
    num[16] = 0;                //Добавляем в конец ноль чтобы выводилась строка
    ^   ~~
src.cpp:20:4: note: array 'num' declared here
   char num[16];                //Объявляем массив из 16 элементов
   ^
src.cpp:40:5: warning: array index 16 is past the end of the array (which contains 16 elements) [-Warray-bounds]
    num[16] = 0;                //Добавляем в конец ноль чтобы выводилась строка
    ^   ~~
src.cpp:20:4: note: array 'num' declared here
   char num[16];                //Объявляем массив из 16 элементов
   ^
0
 Аватар для Argus19
1449 / 466 / 78
Регистрация: 24.09.2017
Сообщений: 2,551
Записей в блоге: 24
11.02.2020, 18:17
Лучший ответ Сообщение было отмечено Olgagusy как решение

Решение

valen10, спасибо. Моя ошибка
Если вас не затруднит, объясните почему при вставке после каждой тетрады пробела ' ', выводится только первая тетрада?
C++
1
2
3
4
5
char num[21] = { };
//вводим преобразованные тетрады с пробелами
cout << "Введённое число - " << string (num) << endl;
//Если изменить вывод, то между тетрадами символ 'a'.
cout << "Введённое число - " << string (num, 20) << endl;
Как я понимаю, проблема char и Unicodе?
0
Параллельный Кот
 Аватар для valen10
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
11.02.2020, 21:40
Цитата Сообщение от Argus19 Посмотреть сообщение
C++
1
char num[21] = { };
А где здесь Unicode? Там же нули и ничего не должно выводиться.
0
 Аватар для Argus19
1449 / 466 / 78
Регистрация: 24.09.2017
Сообщений: 2,551
Записей в блоге: 24
12.02.2020, 19:00
Цитата Сообщение от valen10 Посмотреть сообщение
Там же нули и ничего не должно выводиться.
Если в массив вводить нули, то они потом
C++
1
cout << "Введённое число - " << string (num, 20) << endl;
выводятся как символ 'a'. Где-то что-то слышал, типа, для получения кода символа от него отнимали код нуля. Точно не помню.
0
Параллельный Кот
 Аватар для valen10
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
12.02.2020, 19:48
Цитата Сообщение от Argus19 Посмотреть сообщение
выводятся как символ 'a'
Скрин сделайте, хочу это увидеть. Массив и так заполнен кодами 0, которые являются признаком конца строки, выводиться ничего не должно.

Цитата Сообщение от Argus19 Посмотреть сообщение
Где-то что-то слышал, типа, для получения кода символа от него отнимали код нуля.
Наоборот только. Если из кода символа, обозначающего цифру, вычесть код символа '0', получим саму цифру.
0
 Аватар для Argus19
1449 / 466 / 78
Регистрация: 24.09.2017
Сообщений: 2,551
Записей в блоге: 24
12.02.2020, 20:05
Цитата Сообщение от valen10 Посмотреть сообщение
Наоборот только. Если из кода символа, обозначающего цифру, вычесть код символа '0', получим саму цифру.
Спасибо.
Пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <stdio.h>
#include <string>
using namespace std;
int main()
 {
     setlocale(LC_ALL, "Rus");  //Устанавливаем русский шрифт
     char num[20] = { };            //Объявляем массив из 20 элементов
     //char *ptr = num;             //Указатель на массив
     num[0] = char ('1');       //Вставляем первый символ '1' для наглядности    
    num[19] = char (0);         //Добавляем в конец ноль
    cout  << string (num, 20) << endl;
system ("pause");
    return 0;
 }
Миниатюры
Дополнительный код  
0
 Аватар для Argus19
1449 / 466 / 78
Регистрация: 24.09.2017
Сообщений: 2,551
Записей в блоге: 24
12.02.2020, 20:54
Замена 11 строки на
C++
1
num[19] = 0;
приводит к такому же результату.
0
Параллельный Кот
 Аватар для valen10
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
12.02.2020, 21:17
Не знаю, что сказать тут. Полученный Вами результат противоречит логике, но, возможно, я что-то упускаю.

Запустите отладку выполняйте программу построчно, смотрите на значения переменных.

Цитата Сообщение от Argus19 Посмотреть сообщение
C++
1
char num[20] = { };            //Объявляем массив из 20 элементов
После этой строки в массиве num должно быть 20 нулей.
Кликните здесь для просмотра всего текста


Цитата Сообщение от Argus19 Посмотреть сообщение
C++
1
num[0] = char ('1');       //Вставляем первый символ '1' для наглядности
Тут меняется первый элемент на '1' с кодом 49.
Кликните здесь для просмотра всего текста


Строка 11 ничего не меняет. В результате получается так:
0
 Аватар для Argus19
1449 / 466 / 78
Регистрация: 24.09.2017
Сообщений: 2,551
Записей в блоге: 24
12.02.2020, 21:43
Цитата Сообщение от valen10 Посмотреть сообщение
Полученный Вами результат противоречит логике
Это может зависеть от версии VS?
Не соображу, как в отладке проверить данные. У меня VS2010.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.02.2020, 21:43

Естественная форма в дополнительный код
Здравствуйте. Нужно перевести число из естественной формы в дополнительный код. Если честно, то совсем не понимаю, как это можно...

Можно ли во время выполнения программы выполнить дополнительный код?
Доброго времени суток кибер люди :) Нужна ваша помощь в плане разъяснения следующих вопросов: 1. Собрал я программу на С++, запустил....

дополнительный счетчик не считает
проблема такая, в коде for(int w = 0; w&lt;cline; w++){ int writv = 0; if(w==writv){ sprintf(&amp;obufer,&quot;%s&quot;,txn.c_str()); }else{ ...

Почему появляются дополнительный сиволы в строке?
Относительно недавно начал изучать C++, дошёл до структур, написал код: #include &lt;iostream&gt; #include &lt;string.h&gt; using...

Как теперь записать в дополнительный столбец?
записать в дополнительный столбец значение удвоенного минимального каждой строки матрицы О(6,6). Как теперь записать в дополнительный...


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

Или воспользуйтесь поиском по форуму:
34
Ответ Создать тему
Новые блоги и статьи
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет) Содержание проекта Симуляция вековой (50 лет) экологической сукцессии в почве леса Основные участники: АМ-гриб, ЭКМ-гриб,. . .
сукцессия 23. Более физиологичная физиология, более экологичная экология, более диффурные диффуры.
anaschu 12.07.2026
Что реально нашли и починили за эти 5 часов Правило Линдемана (КПД конверсии сахара в тело, kEff) — раньше 100% полученного углерода шло прямо в биомассу гриба; теперь только kEff=0. 5 (после. . .
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru