Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.81/21: Рейтинг темы: голосов - 21, средняя оценка - 4.81
0 / 0 / 0
Регистрация: 15.01.2014
Сообщений: 14

Поразрядные операции (C++ Builder 6). Определить, есть ли в числе L байт из цифр FC

16.01.2014, 01:13. Показов 4375. Ответов 38
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
ребят привет, опять обращаюсь, кому не сложно, помогите сделать это. Просто не представляю как это и что это к чему делать...

Дано long-число L = ABCDEFGH, где AB…GH – 16-ричные цифры. Определить,
есть ли в числе L байт из цифр FC.

Добавлено через 12 минут
8. Поразрядные операции
Цель работы: изучение поразрядных операций для решения задач обработки целочисленных данных на уровне битов, выработка умений тестирования и отладки программ с поразрядными операциями.
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
/* Программа 8 демонстрирует использование поразрядных операций для работы с целыми числами на уровне битов: постановка и сброс флагов, работа с 16-ричными числами и кодами символов. */
   #include <stdio.h>
   #include <conio.h>
 void  long_bits (unsigned long L ); // Выводит на экран 2-ый код 16-го числа
void main( void )
 { unsigned long  L;
   clrscr();
        < Вывод шапки программы, см. программу 1 или 2 >
// Установка флага в k-ый разряд числа, k=0..31
   L = 0;
   long  k = 3;
   L = L | ( 1L<< k ); // L = 8 для флага в позиции 3
   printf( "\n Установка флага в %d разряд числа L = 0: L = %lX", k, L);
// Сброс флага из k-го разряда числа, k=0..31
   L = 0xFFFFFFFF;
    L = L & ~( 1L<< k );
    printf("\nСброс флага в %d разряде числа L=0xFFFFFFFF:  L=%lX", k, L);
    getch();
// Образуем символ из старшей и младшей 16-ых цифр числа L
    L=0x42345678; // код ch=0x48
    printf("\n Cимвол из старшей и младшей 16-х цифр числа L=%lX", L);
    char ch;
    ch=((L & 0xF0000000) >> 24); // ch = 0x40 
    ch=ch | (L & 0xF);  // ch=0x48
    printf("\nL=%lX, 16-ый код ch=%X, символ ch=%c ", L, ch, ch);
        getch();
 printf("\n\n Введите long-число в 16-м коде для перевода в 2-ый код: " );
    scanf("%lx", &L);
    long_bits( L );
        getch();
// Пример использования операции XOR для кодирования и декодирования
// int-числа d символом ch:
    ch='a';
    int d=12345;
    printf("\n\n Число d=%d закодировано символом \'%c\' операцией XOR: ",
            d, ch);
    d=(d & 0xFF) ^ ch | (d & 0xFF00) ^ (int(ch) << 8);
    printf("\n\t код d=%d", d);
    d=(d & 0xFF) ^ ch | (d & 0xFF00) ^ (int(ch) << 8);
    printf("\n Декодируем аналогичными действиями: d=%d", d);
        getch();
 } 
void  long_bits( long  L )
 { unsigned long m=1;
    printf(" Число %lX в 16-м коде имеет 2-е представление:\n\t", L);
    for(int k=31; k>=0; k--)
    { if( (m << k) & L ) printf("1");
      else printf( "0" );
    if( k%4 == 0 ) printf( " " ); // группы битов 16-х цифр разделяем пробелом
    }
 }
Вот что написано в методичке, может поможет. Я ничего не понял
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.01.2014, 01:13
Ответы с готовыми решениями:

Дано длинное целое число, содержащее не более 100 цифр Определить, есть ли в этом числе заданная цифра
Помогите решить 4. Дано длинное целое число, содержащее не более 100 цифр. Рассматривать цифры числа, как массив символов. Определить...

Ввести целое число и определить, верно ли, что в его записи есть две одинаковые цифры. Найти сумму, среднее арифметическое и количество цифр в числе
Ввести целое число и определить, верно ли, что в его записи есть две одинаковые цифры. Найти сумму, среднее арифметическое и количество...

Определить сколько цифр в числе n, чему равна сумма его цифр
Дано натуральное число n. Определить: сколько цифр в числе n, чему равна сумма его цифр.

38
0 / 0 / 1
Регистрация: 15.01.2014
Сообщений: 48
16.01.2014, 02:42
Дано long-число L=ABCDEFGH, где AB..GH - 16-ричные цифры. Необходимо на место цифры D записать результат операции A|F^~H, если в двоичной цифре H не более 2-х единиц.
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
16.01.2014, 11:02
Цитата Сообщение от catsergo Посмотреть сообщение
не представляю как это и что это
C++
1
2
3
4
5
6
    
 unsigned long L = 0xABCDEFAB ;
 BYTE mask = 0xFC;
 int Count = 0;
 for (int i=0;i<8;i++) if ((BYTE)(mask ^ L>>(4*i)) == 0) Count++;
 if (Count>0) ShowMessage("Áàéò â ÷èñëå ïðèñóòñòâóåò");
значок ^ - это поразрядное исключающее ИЛИ; значок >> - сдвиг числа вправо... - L>>4 значит сдвиг числа L на 4 разряда вправо.
2
0 / 0 / 0
Регистрация: 15.01.2014
Сообщений: 14
16.01.2014, 19:18  [ТС]
Всего лишь??? =) Я думал будет больше)

Что ж, проверю - отпшусь) спасибо большое)
0
0 / 0 / 1
Регистрация: 15.01.2014
Сообщений: 48
17.01.2014, 04:36
nick42, не мог бы ты мне помочь с моим заданием?
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
17.01.2014, 11:29
Если я правильно понял это...
Цитата Сообщение от antifreeze Посмотреть сообщение
если в двоичной цифре H не более 2-х единиц
то приблизительно вот так:__
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void __fastcall TForm1::Button3Click(TObject *Sender)
{
    unsigned long Lo = 0xABCDEFBA ;
    char Count=0, *izo ;
    BYTE hH = Lo&0x0F;
    itoa(hH,izo,2);     // ïðåîáðàçîâàíèå òåòðàäû â äâîè÷íûé âèä: 1011-íàïð
    for (int i=0;i<4;i++) if(izo[i]=='1') Count++;
    if (Count<3) {      // åñëè åäèíèö íå áîëåå 2
      BYTE mask = ((Lo>>8)&0x0F)^(~Lo&0x0F);
      mask |= Lo>>28;
      Lo = (Lo&0xFFF0FFFF) | mask<<16; // î÷èñòêà ïîëÿ è çàïèñü 4-é òåòðàäû
    }
}
0
0 / 0 / 1
Регистрация: 15.01.2014
Сообщений: 48
17.01.2014, 11:46
nick42, то есть этот код - всё задание целиком уже?
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
17.01.2014, 11:57
Цитата Сообщение от antifreeze Посмотреть сообщение
nick42, то есть этот код - всё задание целиком уже?
Ну да...

Добавлено через 1 минуту
Проверить можно так: Caption=IntToHex((__int64)Lo,8);
0
 Аватар для Kulgar
511 / 196 / 26
Регистрация: 07.08.2013
Сообщений: 814
17.01.2014, 11:59
Цитата Сообщение от antifreeze Посмотреть сообщение
Дано long-число L=ABCDEFGH, где AB..GH - 16-ричные цифры. Необходимо на место цифры D записать результат операции A|F^~H, если в двоичной цифре H не более 2-х единиц.
ХаркорчеГ :
C++
1
2
3
4
5
6
7
8
9
10
11
unsigned long L = 0x0BFCD0FA;
BYTE M = (((L & 0xF0000000) >> 28) | ((L & 0x00000F00) >> 8) ^ ~(L & 0x0000000F) & 0x0000000F);
BYTE mask = 0x1;
int Count = 0;
for (int i = 0; i < 4; i++)
    if (((mask << i) & (BYTE)M) > 0)
        Count++;
if (Count < 3)
    L = (L&~0x000F0000) | ((((L & 0xF0000000) >> 28 | ((L & 0x00000F00) >> 8) ^ ~(L & 0x0000000F)) & 0x0000000F) << 16);
else
    ShowMessage("В двоичной цифре H менее 2-х единиц");
Цитата Сообщение от antifreeze Посмотреть сообщение
nick42, то есть этот код - всё задание целиком уже?
Глупый вопрос. Компилируете код и смотрите сами. Вам в любом случае его проверять/редактировать перед сдачей.
0
0 / 0 / 1
Регистрация: 15.01.2014
Сообщений: 48
17.01.2014, 12:05
Kulgar, попробовал твой код:
Build
[C++ Error] Unit1.cpp(4): E2141 Declaration syntax error
[C++ Error] Unit1.cpp(5): E2238 Multiple declaration for 'BYTE'
[C++ Error] Unit1.cpp(4): E2344 Earlier declaration of 'BYTE'
[C++ Error] Unit1.cpp(5): E2141 Declaration syntax error
[C++ Error] Unit1.cpp(7): E2040 Declaration terminated incorrectly
[C++ Error] Unit1.cpp(7): E2141 Declaration syntax error
[C++ Error] Unit1.cpp(7): E2238 Multiple declaration for 'i'
[C++ Error] Unit1.cpp(7): E2344 Earlier declaration of 'i'
[C++ Error] Unit1.cpp(7): E2141 Declaration syntax error
[C++ Error] Unit1.cpp(10): E2040 Declaration terminated incorrectly
[C++ Error] Unit1.cpp(12): E2040 Declaration terminated incorrectly
0
 Аватар для Kulgar
511 / 196 / 26
Регистрация: 07.08.2013
Сообщений: 814
17.01.2014, 12:12
antifreeze, уважаемый, Вам хоть какой-нибудь материал по среде, в которой программируете, изучить бы. Вы смешали мой код со своим, элементарно не поменяв имена повторяющимся переменным. Разумеется ошибки. Так Вы их прочитайте и последуйте рекомендациям компилятора.
Код рабочий. Проверено в 6.0 и в XE2.
0
0 / 0 / 1
Регистрация: 15.01.2014
Сообщений: 48
17.01.2014, 13:42
Kulgar, я просто взял отдельно твой код, стал компилировать и выдало кучу ошибок
0
 Аватар для Kulgar
511 / 196 / 26
Регистрация: 07.08.2013
Сообщений: 814
17.01.2014, 14:05
antifreeze, ! наглая ложь!
Code
1
[C++ Error] Unit1.cpp(7): E2238 Multiple declaration for 'i'
Multiple - множественный, многочисленный, многократный
declaration - декларация, объявление, описание
for 'i' - для переменной i.
У Вас уже есть в коде переменная i.
0
0 / 0 / 1
Регистрация: 15.01.2014
Сообщений: 48
17.01.2014, 14:23
Kulgar, у меня реально в окне только твой код. Никаких ранее объявленных переменных
0
 Аватар для Kulgar
511 / 196 / 26
Регистрация: 07.08.2013
Сообщений: 814
17.01.2014, 14:28
Цитата Сообщение от antifreeze Посмотреть сообщение
Kulgar, у меня реально в окне только твой код. Никаких ранее объявленных переменных
Это нонсенс. Такого не может быть. Создайте новый проект. Сохраните его в отдельную папку. Вставьте код. Откомпилируйте. Если ошибки будут вновь, выкладывайте проект.
0
 Аватар для Kulgar
511 / 196 / 26
Регистрация: 07.08.2013
Сообщений: 814
17.01.2014, 14:57
antifreeze, Вы нигде не уточняли, что речь идёт о консольном приложении. А поскольку тема размещена в ветке форума Форум C++ Builder, то по умолчанию предполагается оконное приложение. В нём я Вам и составил пример.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
main()
{
    unsigned long L = 0x0BFCD0FA;
    char M = (((L & 0xF0000000) >> 28) | ((L & 0x00000F00) >> 8) ^ ~
        (L & 0x0000000F) & 0x0000000F);
    char mask = 0x1;
    int Count = 0;
    for (int i = 0; i < 4; i++)
        if (((mask << i) & (char)M) > 0)
            Count++;
    if (Count < 3)
        L = (L&~0x000F0000) |
            ((((L & 0xF0000000) >> 28 | ((L & 0x00000F00) >> 8) ^ ~
        (L & 0x0000000F)) & 0x0000000F) << 16);
    else
        printf("В двоичной цифре H менее 2-х едениц");
    getch();
}
У Вашего коллеги catsergo вопросов не возникло.
1
0 / 0 / 1
Регистрация: 15.01.2014
Сообщений: 48
17.01.2014, 15:03
Kulgar, а этот код на место цифры D записывает результат операции A|F^~H?
0
 Аватар для Kulgar
511 / 196 / 26
Регистрация: 07.08.2013
Сообщений: 814
17.01.2014, 15:04
Цитата Сообщение от antifreeze Посмотреть сообщение
Kulgar, а этот код на место цифры D записывает результат операции A|F^~H?
Нет.
0
0 / 0 / 1
Регистрация: 15.01.2014
Сообщений: 48
17.01.2014, 15:07
Kulgar, как тогда сделать чтоб записывал и вывел результат? Это единственная работа, где вообще ничё не понял и не понимаю зачем это нужно и к чему
0
 Аватар для Kulgar
511 / 196 / 26
Регистрация: 07.08.2013
Сообщений: 814
17.01.2014, 15:15
Цитата Сообщение от antifreeze Посмотреть сообщение
Kulgar, как тогда сделать чтоб записывал и вывел результат? Это единственная работа, где вообще ничё не понял и не понимаю зачем это нужно и к чему
Господь мой Пастырь...
ДА! код меняет байт D в исходной переменной. С выводом как-нибудь справитесь. Уж это Вы должны уже уметь.
Это нужно, чтобы Вы умели работать с данными побитно. Лет через 50 может и будут "интеллектуальные" системы, которые снимут с человека необходимость разбираться в информационном обмене на машинном уровне. Но пока этого нет. А следовательно нужно изучать. Кто знает.... может Вы как раз и будете тем человеком, которому на столько осточертели биты, что напишите эту самую "интеллектуальную" систему.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.01.2014, 15:15
Помогаю со студенческими работами здесь

Определить: количество цифр в числе, среднее арифметическое цифр, сумму квадратов
Дано натуральное число N. Определить: количество цифр в нем; среднее арифметическое его цифр; сумму квадратов c помощью while

Определить количество цифр, среднее арифметическое цифр в натуральном числе
Дано натуральное число N. Определить: количество цифр в нем; среднее арифметическое его цифр; сумму квадратов его цифр; сумму его первой и...

Определить количество цифр в числе n и сумму всех его цифр
Дано натуральное n , определить количество цифр в числе n и сумму всех его цифр. Значение n ввести с клавиатуры. Добавлено через...

Определить количество цифр в числе n и сумму всех его цифр.
Дано натуральное число n, определить количество цифр в числе n и сумму всех его цифр. Значение n ввести с клавиатуры. Количество цифр...

Определить первую цифру, сумму цифр, количество цифр в числе N
Дано натуральное число n. Определить: а) Первую цифру числа N. б) сумму цифр числа N. в) кол-во цифр в числе N.


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru