Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.91/34: Рейтинг темы: голосов - 34, средняя оценка - 4.91
 Аватар для BonaBerry
3 / 3 / 0
Регистрация: 21.09.2013
Сообщений: 73

Определить, что старший байт числа равен значению переменной с

25.03.2014, 11:59. Показов 7680. Ответов 43
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот такое задание.... Буду рада хотя бы алгоритму выполнения.
Дана переменная char c. Напишите цикл для подсчета в заданном диапазоне целых чисел (int) количества чисел, удовлетворяющих условию: старший байт числа равен значению переменной с.

Добавлено через 11 минут
И покажите, пожалуйста, еще как накладывать маски и пользоваться операторами " | & << >>> " Например, нужно:
00110011 11111111 000000000 010110101
превратить в такое, т.е. середику проинвертировать:
00110011 000000000 11111111 010110101


пока я могу только выводить число:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//  {
//    
//   int    y;
//   std::cout <<"Enter Number"<<endl;
//   cin>>y;
//   int  x=0,  vid, null;
//     int i=sizeof(int);// битовый оператор число в двоичном виде (0000)*8 =0000 0000 0000 00000
////******************************************************************************************/
//  /***ПЕРВОНОЧАЛЬНО*******/
//  std::cout <<"fist look:"<<endl;
//  for (int i=31; i>=0; i--)  // цикл перебора значений
//              {   
//                  vid=((y>>i)&1);    
//                  std::cout <<vid;
//              }
//                  std::cout << endl;
//system("Pause"); 
//      return 0;
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.03.2014, 11:59
Ответы с готовыми решениями:

Для целого числа А выделить старший байт и поставить его на место младшего байта. старший байт при этом обнулить.
Помогите пожалуйста, вообще не могу понять как делать следующее...Еще и в программе CODE BLOCKS препод почему именно эту программу...

Функция: изменить старший байт числа на заданное значение, не изменяя младший байт
функция изменяет старший байт числа на заданное значение не изменяя младший байт. как можно проще

Clojure Определить, факториал какого числа равен передаваемому значению
Здравствуйте! Чего-то такого написал: (defun foo (n) ((setq x 1) (setq foo-plus '(if (= x n) x (let (setq n (/ n (setq x...

43
25.03.2014, 17:19
Студворк — интернет-сервис помощи студентам

Не по теме:

задание не совсем однозначно :)

0
 Аватар для BonaBerry
3 / 3 / 0
Регистрация: 21.09.2013
Сообщений: 73
26.03.2014, 10:56  [ТС]
aLarmanда, спасибо огромное!
Сейчас распишу по шагам - да бы внести полольную ясность...что я не просто хОчу сдуть и свалить)))
1.через побитовое умножение & консервируем 2ой байт - z. (н/р 1010 & 1111= 1010)
2.через побитовое умножение & консервируем 3тий байт - z2.
3.через побитовое умножение & консервируем края.
Далее займемся установкой и сбором байтов, используем логическое ИЛИ (|), для установки, (0000 |1101 =1101) :
и вуаля -все готово!

ValeryS
, Мне кажется тут действительно неверно использовано слово при формулировки задания, так как при инвертации края нам не сохранить, сам понимаешь. А суть упражнения как раз, задействовать побитовые логические операции.
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
26.03.2014, 11:36
Лучший ответ Сообщение было отмечено BonaBerry как решение

Решение

Цитата Сообщение от BonaBerry Посмотреть сообщение
так как при инвертации края нам не сохранить, сам понимаешь
не понимаю
смотри нужно инвертировать два первых байта в бите ( так для примера чтобы много не расписывать)
0xFF^0x03 =0xFC
1111 1111
^
0000 0011
-----------
1111 1100

0x00^0x03 =0x03

0000 0000
^
0000 0011
-----------
0000 0011

0x55^0x03=0x56

0101 0101
^
0000 0011
----------
0101 0110

как видишь инвертируются два младших бита, 6 старших остаются как были
исключающая ИЛИ с 0 оставляет бит как есть с 1 инвертирует

Цитата Сообщение от BonaBerry Посмотреть сообщение
А суть упражнения как раз, задействовать побитовые логические операции.
исключающая ИЛИ является такой же битовой операцией как И и ИЛИ


у нее есть еще интересная особенность если применить два раза то результат равен исходному числу

например
0x05^0x03=0x06

0x06^0x03=0x05;

используется в простейших шифровшиках/дешифровшиках

и еще один фокус поменять две переменных местами не использую третью

C++
1
2
3
a=a^b;
b=a^b;
a=a^b;
возьмем например те же 5 и 3 a=5 b=3
a=a^b; a=5^3=6;
b=a^b; b=6^3=5;
a=a^b; a=6^5=3;
как видишь поменялись местами
1
655 / 576 / 164
Регистрация: 13.12.2012
Сообщений: 2,126
26.03.2014, 11:45
Цитата Сообщение от ValeryS Посмотреть сообщение
два первых байта в бите
О_О wtf
1
26.03.2014, 12:06

Не по теме:

Цитата Сообщение от aLarman Посмотреть сообщение
О_О wtf
А вот:D

0
 Аватар для BonaBerry
3 / 3 / 0
Регистрация: 21.09.2013
Сообщений: 73
26.03.2014, 12:30  [ТС]
ValerySб хватит чудить)))
А вообще огромное спасибо кажется за крайние 24 часа я весьма поумнела и все благодаря всем вам))
и так
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
{
        
        int i=sizeof(int);
        int vid, vidz;
        int y, z;
     
        std::cout <<"y = ";
        cin >>y;
 
        for (int i=31; i>=0; i--) // цикл перебора значений
        {
            vid=((y>>i)&1);
            cout <<vid;
        }
        cout << endl;
 
 
        z=y^0x00ffff00;             // Исключающие ИЛИ маска
        for (int i2=31; i2>=0; i2--) // цикл перебора значений
        {
            vidz=((z>>i2)&1);
            cout <<vidz;
        }
        cout << endl;
 
 
         system("pause");
    return 0;
}
Добавлено через 7 минут
Цитата Сообщение от ValeryS Посмотреть сообщение
у нее есть еще интересная особенность если применить два раза то результат равен исходному числу
например
0x05^0x03=0x06
0x06^0x03=0x05;
используется в простейших шифровшиках/дешифровшиках
и еще один фокус поменять две переменных местами не использую третью
Да, здрово!!! Из серии подобное излечивается подобным.
0
26.03.2014, 12:42

Не по теме:

Цитата Сообщение от BonaBerry Посмотреть сообщение
А вообще огромное спасибо кажется за крайние 24 часа я весьма поумнела и все благодаря всем вам))
я тебя не обижу, если скажу что для этого есть специальная кнопка под каждым сообщением " спасибо"?
если хочешь кого то поблагодарить нажми её

0
 Аватар для BonaBerry
3 / 3 / 0
Регистрация: 21.09.2013
Сообщений: 73
26.03.2014, 16:31  [ТС]
Дана переменная char c. Напишите цикл для подсчета в заданном диапазоне целых чисел (int) количества чисел, удовлетворяющих условию: старший байт числа равен значению переменной с.

Я уточнила насчет формулировки вышеизложенного задания.
У нас есть:
char c = 1. //00000001
нужно найти интовый диапазон чисел. Который может выглядеть примерно так.

00000001 bla bla bla

Я понимаю, что мне нужно:
1. Считать число c ;
2. Потом занести его в инт, в старший байт (например сдвигом).
3. Далее при помощи цикла организовать поиск чисел где старший такой-то.
Но как-то как-то я в реальности этого себе не представляю. Ведь по факту это же огромные числа.
И диапазон даже не взять. Вообще тогда тут нужно организовать вывод наоборот из байтового из вида в десятичный, да?

Начала оформлять. И и у меня он почему-то считывает символы, а не символьное представление чисел (как-то коряво написано), да, вообще врет(((
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
{
 
        char c;  // 1байт=8 битов 
        cout <<"Enter c=";
        cin >>c; 
        char vidc;
        int vidd2,d2, vid2, d3;
        
 
        cout<<endl;
        
        for (int i=7; i>=0; i--)
            {
                vidc=((c>>i)&1);
                cout<<vidc;
            }
        cout<<endl;
        d2=c;
        d3=d2<<24;
 
        for (int i2=31; i2>0;i2--)
            {
                vidd2=((d3>>i2)&1);
                cout<<vidd2;
            }
        cout<<endl;
 
        system("pause");
       return 0;
    }
0
655 / 576 / 164
Регистрация: 13.12.2012
Сообщений: 2,126
26.03.2014, 16:38
Цитата Сообщение от BonaBerry Посмотреть сообщение
он почему-то считывает символы, а не символьное представление чисел
что то я не совсем понимаю о чем Вы, но предположу, что vidc имеет тип чар, и соответственно когда Вы его выводите (оно может быть 0 или 1) выводится символ с кодом 0 или 1

Добавлено через 33 секунды
C++
1
2
3
4
5
for (int i=7; i>=0; i--)
{
vidc=((c>>i)&1);
cout<<(int)vidc;
}
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
26.03.2014, 16:49
Цитата Сообщение от BonaBerry Посмотреть сообщение
нужно найти интовый диапазон чисел. Который может выглядеть примерно так.
тебе весь перебор нужен?
или предельные значения?
0
 Аватар для BonaBerry
3 / 3 / 0
Регистрация: 21.09.2013
Сообщений: 73
26.03.2014, 16:59  [ТС]
Цитата Сообщение от aLarman Посмотреть сообщение
что то я не совсем понимаю о чем Вы, но предположу, что vidc имеет тип чар, и соответственно когда Вы его выводите (оно может быть 0 или 1) выводится символ с кодом 0 или 1
да, я понимаю что он как раз и считывает у меня закодированный символ.Но ведь мне нужен код этого самого символа, который я хочу узнать посредством ввода десятичного числа. Например:
char c = 'A'; // = 65; 00000101

Добавлено через 3 минуты
Цитата Сообщение от ValeryS Посмотреть сообщение
тебе весь перебор нужен?
или предельные значения?
предельные значения
вот ввожу я char c=8;
А на выходе получаю ответ что вот в числах от 14458878 до 14758971 в старшем байте 00001000.
Я так себе это представляю.
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
26.03.2014, 17:13
Цитата Сообщение от BonaBerry Посмотреть сообщение
предельные значения
не нужно никаких циклов

один передел
0xRR000000
второй
0xRRFFFFFF

RR это значение байта который вводится

подсказать, или попробуешь сама разобраться
Цитата Сообщение от BonaBerry Посмотреть сообщение
да, я понимаю что он как раз и считывает у меня закодированный символ.Но ведь мне нужен код этого самого символа, который я хочу узнать посредством ввода десятичного числа. Например:
char c = 'A'; // = 65; 00000101
тебе нужно ввести число от 0 до 255
но поскольку >> переопределен он вводит символы
тут три пути
или приводить как показал aLarman,
или вводить переменную int потом кастрировать до char
или использовать scanf
C++
1
scanf("%i",&c);
мне по душе третий
вводить можно в любой системе( в пределах разумного)
255 десятичное
0377 восьмеричная
0xFF шеснадцетиричное
0
 Аватар для BonaBerry
3 / 3 / 0
Регистрация: 21.09.2013
Сообщений: 73
27.03.2014, 11:52  [ТС]
Вообще не идет, вроде уже в рот положили, а не переживать (((((((((((
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
{
 
        int c, vid, q;  // 1байт=8 битов 
        cout <<"Enter c from 01 to 255 =";
        cin >>c; 
        int i=sizeof(int);
        
        int d=c<<24;
 
        cout<<endl;
 
        for (int i=31; i>=0; i--)  
            {   
                    vid=((d>>i)&1);    
                    std::cout <<vid;
                }
                    std::cout << endl;
 
 
for(int i2=0x00ffffff; i2<=0x00000000; i2++)
{
 int d=c<<24;// создаем переменный в которой старший байт равен c
 int deap=i2 & 0xFF000000; //удаляем все кроме старшего байта
 int deap2=deap | d;  // сравниваем
 if (deap == deap2)  // сравниваем
   q++;
}
        cout<<endl;
 
        system("pause");
       return 0;
    }
0
655 / 576 / 164
Регистрация: 13.12.2012
Сообщений: 2,126
27.03.2014, 12:17
Цитата Сообщение от BonaBerry Посмотреть сообщение
for(int i2=0x00ffffff; i2<=0x00000000; i2++)
цикл без единой итерации
Цитата Сообщение от BonaBerry Посмотреть сообщение
C++
1
int deap2=deap | d; // сравниваем
чаво ?)
Цитата Сообщение от BonaBerry Посмотреть сообщение
C++
1
if (deap == deap2) // сравниваем
а вот так не проще?
C++
1
if(d == deap)
Цитата Сообщение от BonaBerry Посмотреть сообщение
C++
1
int d=c<<24;// создаем переменный в которой старший байт равен c
Выше Вы уже объявили эту переменную и вычислили ее значение, зачем создавать локальную еще раз, и вычислять значение на каждой итерации

Добавлено через 43 секунды

Не по теме:

и плиз, вставляейте теги в свой код

1
27.03.2014, 14:19
 Комментарий модератора 
BonaBerry, оформляете пожалуйста свой код в соответствующие теги.
Или вручную - [ CPP] код [ /CPP], или в окне отправки сообщения слева вверху кнопочка C++ - выделяете свой код и нажимаете ее.
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
27.03.2014, 14:26
Цитата Сообщение от BonaBerry Посмотреть сообщение
Вообще не идет, вроде уже в рот положили,
посмотри в первых постах я уже предлагал решение
а если нужен диапазон то
C++
1
2
3
4
int min=c<<24;
int max=c<<24;
min&=0xFF000000;// это даже лишнее 0 и так будут в младших
max|=0x00FFFFFF;
1
 Аватар для BonaBerry
3 / 3 / 0
Регистрация: 21.09.2013
Сообщений: 73
27.03.2014, 14:43  [ТС]
Цитата Сообщение от aLarman Посмотреть сообщение
цикл без единой итерации
Цитата Сообщение от BonaBerry Посмотреть сообщение
Код C++
1
int deap2=deap | d; // сравниваем
чаво ?)

конечно, же битовое или, устанавливаем знак, операцию изменила, а комментарий нет
Вообще мне стыдно
1
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
27.03.2014, 14:52
Цитата Сообщение от BonaBerry Посмотреть сообщение
Вообще мне стыдно
если б ты знала сколько тупых ошибок у меня бывает

могу предложить такой алгоритм написания программ, когда начинал очень мне он помогал
простой пример сложить два числа результат на экран
сначала пишем алгоритм текстом оформляя комментариями
C++
1
2
3
4
// объявить перемененные
// задать значение
// сложить и присвоить результат
// вывести на экран
потом кодируем этот алгоритм
C++
1
2
3
4
5
6
7
8
9
// объявить перемененные
int a,b,c;
// задать значение
a=5;
b=10;
// сложить и присвоить результат
c=a+b;
// вывести на экран
printf("%d \n",c);
главное к любому языку подходит
0
 Аватар для taras atavin
4226 / 1799 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
27.03.2014, 15:03
Цитата Сообщение от BonaBerry Посмотреть сообщение
Вот такое задание.... Буду рада хотя бы алгоритму выполнения.
C++
1
return (x>>(sizeof(x)*8-8))==c;
.
0
27.03.2014, 15:08

Не по теме:

Цитата Сообщение от taras atavin Посмотреть сообщение
C++
1
sizeof(x)*8-8
(sizeof(x)-1)*8 - правило выноса за скобку хД

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.03.2014, 15:08

Считать старший байт числа
Добрый день подскажите пожалуйста! Как в переменную записать число 3 числа 35, или 6 числа 69?

Битовое представление числа, старший байт
Здравствуйте, программисты. Имеется такой вот код. Все в это коде абсолютно понятно, не могли бы вы мне объяснить 16 строчку с циклом, а...

Извлечь старший байт с числа типа Long.
Есть число типа Long, необходимо из него извлечь старший байт. Делить на 256^3 без толку, если число отрицательное. И обратная задача -...

Как получить младший (старший) байт целого числа (2-байтового)?
Как получить младший (старший) байт целого числа (2-байтового) Есть код в delphi var PG_1, PG_2 : Word; PG: Byte; Block:...

Определить, что куб суммы цифр числа равен квадрату числа
Кто может решите пожалуйста задачу с помощью циклов. Задание 5: Пользователь вводит целое число А. Программа должна определить, что куб...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru