Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
BonaBerry
3 / 3 / 0
Регистрация: 21.09.2013
Сообщений: 73
#1

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

25.03.2014, 11:59. Просмотров 1616. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.03.2014, 11:59
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Определить, что старший байт числа равен значению переменной с (C++):

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

функция изменяет старший байт числа на заданное значение не изменяя младший байт - C++
функция изменяет старший байт числа на заданное значение не изменяя младший байт. как можно проще

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

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

Вывести старший и младший байт заданного целого положительного числа в шестнадцатиричном и двоичном виде - C++
Дано целое положительное число , тип int. Вывести старший и младший байт в 16ом и в 2ом виде.

Определить номера строк матрицы, хотя бы один элемент которых равен заданному значению - C++
4. Определить номера строк матрицы R, хотя бы один элемент которых равен с, и элементы этих строк умножить на d.

43
ValeryS
Модератор
7018 / 5356 / 529
Регистрация: 14.02.2011
Сообщений: 18,069
25.03.2014, 12:12 #2
Цитата Сообщение от BonaBerry Посмотреть сообщение
И покажите, пожалуйста, еще как накладывать маски и пользоваться операторами " | & << >>> " Например, нужно:
00110011 11111111 000000000 010110101
превратить в такое, т.е. середику проинвертировать:
00110011 000000000 11111111 010110101
если так как есть, т. е число 4 байта
то
C++
1
a^=0x00FFFF00;
Цитата Сообщение от BonaBerry Посмотреть сообщение
Дана переменная char c. Напишите цикл для подсчета в заданном диапазоне целых чисел (int) количества чисел, удовлетворяющих условию: старший байт числа равен значению переменной с.
если я правильно перевел
C++
1
2
3
4
5
6
7
8
for(int i=min; i<=max; i++)
{
 int tmp=c<<24;// создаем переменный в которой старший байт равен c
 int tmp1=i&0x00FFFFFF; // удаляем старший байт
 int tmp2=tmp1| tmp;  // создаем число 
printf(" %x,%d  %x,%d %x,%d  %x,%d  %x,%d" i,i,c,c,tmp,tmp,tmp1,tmp1,tmp2,tmp2);
 
}
разумеется код не идеальный так для изучения
0
aLarman
644 / 565 / 89
Регистрация: 13.12.2012
Сообщений: 2,111
Завершенные тесты: 1
25.03.2014, 12:17 #3
Цитата Сообщение от BonaBerry Посмотреть сообщение
старший байт числа равен значению переменной с.
Цитата Сообщение от ValeryS Посмотреть сообщение
C++
1
int tmp1=i&0x00FFFFFF; // удаляем старший байт
зачем его обнулять? его как раз надо оставить, а остальное убрать. и затем сравнить то что осталось с tmp
0
ValeryS
Модератор
7018 / 5356 / 529
Регистрация: 14.02.2011
Сообщений: 18,069
25.03.2014, 12:27 #4
Цитата Сообщение от aLarman Посмотреть сообщение
зачем его обнулять? его как раз надо оставить, а остальное убрать. и затем сравнить то что осталось с tmp
ну может и так
я же сказал
Цитата Сообщение от ValeryS Посмотреть сообщение
если я правильно перевел
вот другой вариант

C++
1
2
3
4
5
6
7
8
for(int i=min; i<=max; i++)
{
 int tmp=c<<24;// создаем переменный в которой старший байт равен c
 int tmp1=i&0xFF000000 //удаляем все кроме старшего байта
 if(tmp1== tmp)  // сравниваем
   q++;
 
}
или вот так
C++
1
2
3
4
5
6
7
8
for(int i=min; i<=max; i++)
{
 int tmp=(i>>24)&0xFF;//выделяем старший байт
 
 if(tmp1== c)  // сравниваем
   q++;
 
}
0
BonaBerry
3 / 3 / 0
Регистрация: 21.09.2013
Сообщений: 73
25.03.2014, 13:23  [ТС] #5
Ребят, спасибо большое.
Такой вопрос, что аж неловко, чего я не понимаю про маски и представления чисел, так это вот что -
как из такого числа 0x00FFFF00 (тип int - 8 битов) получается такое:
00000000 11111111 111111111 000000000 (тот же тип int, тоже число в 32 разрядной сетке ). Как так оно "растянулось"?
и как при помощи маски 0x.....
мне допустим воссоздать такое представление числа?
00110101 111100010 111011001 111100011
0
ValeryS
Модератор
7018 / 5356 / 529
Регистрация: 14.02.2011
Сообщений: 18,069
25.03.2014, 13:35 #6
Цитата Сообщение от BonaBerry Посмотреть сообщение
Как из такого числа 0x00FFFF00 получается такое:
00000000 11111111 111111111 000000000
нук
таблица перевода из двоичного в шестнадцатеричное
0000 0 0
0001 1 1
0010 2 2
0011 3 3
0100 4 4
0101 5 5
0110 6 6
0111 7 7
1000 8 8
1001 9 9
1010 A 10
1011 B 11
1100 C 12
1101 D 13
1110 E 14
1111 F 15

эта таблица на 4 бита(полубайт) в байте 8 бит значит делишь в блоки по 4 и заменяешь буквами/цифрами
например 10000000 1000 0000 80(шеснадцетиричных) в Си записывается так 0x80
11111111 1111 1111 0xFF
01010101 0101 0101 0x55

выучи пригодится

Добавлено через 35 секунд
Цитата Сообщение от BonaBerry Посмотреть сообщение
мне допустим воссоздать такое представление числа?
00110101 111100010 111011001 111100011
попробуй сам

Добавлено через 2 минуты
Цитата Сообщение от BonaBerry Посмотреть сообщение
и как при помощи маски 0x.....
это не маска это представление числа
в Си 3 представления
123 десятичное
0123 восьмеричное, начинается с 0
0х123 шестнадцатеричное, начинается с 0х
0
BonaBerry
3 / 3 / 0
Регистрация: 21.09.2013
Сообщений: 73
25.03.2014, 14:00  [ТС] #7
ValeryS, прям развеял мои думы))) Теперь только сама попробую))
Что меня вводило в заблуждение, что видела представление "-1" как 0xffffffff а не 0xffffffffffff......
а чего же двоичного нет??? если это можно сказать фундамент программирования и исчисления.
0
aLarman
644 / 565 / 89
Регистрация: 13.12.2012
Сообщений: 2,111
Завершенные тесты: 1
25.03.2014, 14:08 #8
-1 может разной быть
например int то 0xFFFFFFFF
short int 0xFFFF
char 0xFF
тут главное сколько байт в представлении числа (4 2 1 в примере)
0
BonaBerry
3 / 3 / 0
Регистрация: 21.09.2013
Сообщений: 73
25.03.2014, 14:08  [ТС] #9
0011 0101 1111 0010 1110 1001 1111 0011 = 0x35f2e9f3
Хотя я понимаю, что могу воспользоваться калькулятором программиста, но хочется дойти до сути...
0
aLarman
644 / 565 / 89
Регистрация: 13.12.2012
Сообщений: 2,111
Завершенные тесты: 1
25.03.2014, 14:11 #10
Цитата Сообщение от BonaBerry Посмотреть сообщение
а чего же двоичного нет???
я думаю потому что это неудобно, сами подумайте для int используется 32 бита, и что их все перечислять?

Добавлено через 1 минуту
Цитата Сообщение от BonaBerry Посмотреть сообщение
но хочется дойти до сути...
все таки спрошу, в школе информатика была?
0
ValeryS
Модератор
7018 / 5356 / 529
Регистрация: 14.02.2011
Сообщений: 18,069
25.03.2014, 14:13 #11
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от BonaBerry Посмотреть сообщение
а чего же двоичного нет??? если это можно сказать фундамент программирования и исчисления.
к отцам основателям вопросы
Цитата Сообщение от BonaBerry Посмотреть сообщение
что видела представление "-1" как 0xffffffff а не 0xffffffffffff......
а это от размерности зависит
например char (8 бит) 0xFF
short (16 бит) 0xFFFF
int (32 бит) 0xFFFFFFFF
long long (64 бит) 0xFFFFFFFFFFFFFFFF

Добавлено через 1 минуту
Цитата Сообщение от BonaBerry Посмотреть сообщение
0011 0101 1111 0010 1110 1001 1111 0011 = 0x35f2e9f3
Браво
Цитата Сообщение от BonaBerry Посмотреть сообщение
Хотя я понимаю, что могу воспользоваться калькулятором программиста,
а это для проверки
1
BonaBerry
3 / 3 / 0
Регистрация: 21.09.2013
Сообщений: 73
25.03.2014, 14:42  [ТС] #12
В школе информатика была, но мы там по большей части работали в Exel и Power Point.
Про двоичную систему возник вопрос и ее "явное "отсутствие в С++ мне удивило по большей части, во-первых, из-за обилия ее в "Архитектуре.. '' и явный пресинг на представления двоичных чисел и побитовые операции еже с ними , что вот и казалось что двоичная система- это наше всё. Нет, всё - это 16ричная! Все смешалось и вылетело из головы.
Теперь все куда как понятнее. Сейчас порешаю задачки и вынесу их на всеобщие обозрение.
0
aLarman
644 / 565 / 89
Регистрация: 13.12.2012
Сообщений: 2,111
Завершенные тесты: 1
25.03.2014, 14:49 #13
Цитата Сообщение от BonaBerry Посмотреть сообщение
но мы там по большей части работали в Exel и Power Point.
странно, у меня была только в 10 и 11 там мы прогали на паскале ну и с числами работали(нам рассказывали про представление чисел и перевод из одной системы счисления в другую)
0
BonaBerry
3 / 3 / 0
Регистрация: 21.09.2013
Сообщений: 73
25.03.2014, 16:09  [ТС] #14
aLarman вот как- то так. Я думаю опыт программирования на Паскаль, мне бы сейчас здорово бы помог.


Вот код для второго задания, в котором нужно инвертировать серединку. Получается в два шага.
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
{
             int i=sizeof(int);
             int vid, vid2, vid3;
             
             int y=0x7fff007A;
            
            cout <<"y = " << y <<endl; 
            
            for (int i=31; i>=0; i--)  // цикл перебора значений
                {   
                    vid=((y>>i)&1);    
                    cout <<vid;
                }
                    cout << endl;
 
 
            int z= y & 0x7f00ff7A; 
            cout <<"z = " <<z<<endl; 
 
            for (int i2=31; i2>=0; i2--)  // цикл перебора значений
                {   
                    vid2=((z>>i2)&1);    
                    cout <<vid2;
                }
                    cout << endl;
 
 
            int w= z | 0x7f00ff7A; 
            cout <<"w = " <<w<<endl; 
 
            for (int i3=31; i3>=0; i3--)  // цикл перебора значений
                {   
                    vid3=((w>>i3)&1);    
                    cout <<vid3;
                }
                    cout << endl;
0
aLarman
644 / 565 / 89
Регистрация: 13.12.2012
Сообщений: 2,111
Завершенные тесты: 1
25.03.2014, 16:38 #15
у Вас получилась привязка к конкретным значениям, а не общее решение, стоит изменить иисх данные -все сломается

Добавлено через 2 минуты
Цитата Сообщение от BonaBerry Посмотреть сообщение
превратить в такое, т.е. середику проинвертировать
я правильно понимаю задание, взять 3ий байт и поменять его с 2ым
0
25.03.2014, 16:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.03.2014, 16:38
Привет! Вот еще темы с ответами:

Найти среди двузначных чисел такие, что квадрат числа равен кубу суммы цифр этого числа - C++
Найти среди двузначных чисел такие, что квадрат числа равен кубу суммы цифр этого числа. Помогите пожалуйста, как тут написать само...

Определить, равен ли квадрат заданного трехзначного числа кубу суммы цифр этого числа VS2010 - C++
тупая задача на новый лад - С++: Определить, равен ли квадрат заданного трехзначного числа кубу суммы цифр этого числа. Есть наметки,...

Определить порядок хранения байт 16-ричного числа - C++
Всем привет! Имеется следующий вопрос: написать программу, которая показывает порядок хранения байт 16-ричного числа. Как это сделать?

определить равен ли квадрат заданного двухзначного числа - C++
определить,равен ли квадрат заданного двухзначного числа (введенного с клавиатуры)кубу суммы цифр этого числа.


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru