Форум программистов, компьютерный форум CyberForum.ru

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

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

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

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

C++ Дано трёхзначное число.Определить, равен ли квадрат этого числа сумме его цифр.
Дано натуральное число.Определить,сколько раз в нём встречается минимальная цифра(например, для числа 102200 ответ равен 3,для числа 40330-2,для числ C++
Для целого числа А выделить старший байт и поставить его на место младшего байта. старший байт при этом обнулить. C++
определить равен ли квадрат заданного двухзначного числа C++
Определить, равен ли квадрат заданного трехзначного числа кубу суммы цифр этого числа VS2010 C++
Найти среди двузначных чисел такие, что квадрат числа равен кубу суммы цифр этого числа C++
C++ функция изменяет старший байт числа на заданное значение не изменяя младший байт
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryS
Модератор
6514 / 4980 / 460
Регистрация: 14.02.2011
Сообщений: 16,495
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);
 
}
разумеется код не идеальный так для изучения
aLarman
641 / 562 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
25.03.2014, 12:17     Определить, что старший байт числа равен значению переменной с #3
Цитата Сообщение от BonaBerry Посмотреть сообщение
старший байт числа равен значению переменной с.
Цитата Сообщение от ValeryS Посмотреть сообщение
C++
1
int tmp1=i&0x00FFFFFF; // удаляем старший байт
зачем его обнулять? его как раз надо оставить, а остальное убрать. и затем сравнить то что осталось с tmp
ValeryS
Модератор
6514 / 4980 / 460
Регистрация: 14.02.2011
Сообщений: 16,495
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++;
 
}
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
ValeryS
Модератор
6514 / 4980 / 460
Регистрация: 14.02.2011
Сообщений: 16,495
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х
BonaBerry
3 / 3 / 0
Регистрация: 21.09.2013
Сообщений: 73
25.03.2014, 14:00  [ТС]     Определить, что старший байт числа равен значению переменной с #7
ValeryS, прям развеял мои думы))) Теперь только сама попробую))
Что меня вводило в заблуждение, что видела представление "-1" как 0xffffffff а не 0xffffffffffff......
а чего же двоичного нет??? если это можно сказать фундамент программирования и исчисления.
aLarman
641 / 562 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
25.03.2014, 14:08     Определить, что старший байт числа равен значению переменной с #8
-1 может разной быть
например int то 0xFFFFFFFF
short int 0xFFFF
char 0xFF
тут главное сколько байт в представлении числа (4 2 1 в примере)
BonaBerry
3 / 3 / 0
Регистрация: 21.09.2013
Сообщений: 73
25.03.2014, 14:08  [ТС]     Определить, что старший байт числа равен значению переменной с #9
0011 0101 1111 0010 1110 1001 1111 0011 = 0x35f2e9f3
Хотя я понимаю, что могу воспользоваться калькулятором программиста, но хочется дойти до сути...
aLarman
641 / 562 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
25.03.2014, 14:11     Определить, что старший байт числа равен значению переменной с #10
Цитата Сообщение от BonaBerry Посмотреть сообщение
а чего же двоичного нет???
я думаю потому что это неудобно, сами подумайте для int используется 32 бита, и что их все перечислять?

Добавлено через 1 минуту
Цитата Сообщение от BonaBerry Посмотреть сообщение
но хочется дойти до сути...
все таки спрошу, в школе информатика была?
ValeryS
Модератор
6514 / 4980 / 460
Регистрация: 14.02.2011
Сообщений: 16,495
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 Посмотреть сообщение
Хотя я понимаю, что могу воспользоваться калькулятором программиста,
а это для проверки
BonaBerry
3 / 3 / 0
Регистрация: 21.09.2013
Сообщений: 73
25.03.2014, 14:42  [ТС]     Определить, что старший байт числа равен значению переменной с #12
В школе информатика была, но мы там по большей части работали в Exel и Power Point.
Про двоичную систему возник вопрос и ее "явное "отсутствие в С++ мне удивило по большей части, во-первых, из-за обилия ее в "Архитектуре.. '' и явный пресинг на представления двоичных чисел и побитовые операции еже с ними , что вот и казалось что двоичная система- это наше всё. Нет, всё - это 16ричная! Все смешалось и вылетело из головы.
Теперь все куда как понятнее. Сейчас порешаю задачки и вынесу их на всеобщие обозрение.
aLarman
641 / 562 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
25.03.2014, 14:49     Определить, что старший байт числа равен значению переменной с #13
Цитата Сообщение от BonaBerry Посмотреть сообщение
но мы там по большей части работали в Exel и Power Point.
странно, у меня была только в 10 и 11 там мы прогали на паскале ну и с числами работали(нам рассказывали про представление чисел и перевод из одной системы счисления в другую)
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;
aLarman
641 / 562 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
25.03.2014, 16:38     Определить, что старший байт числа равен значению переменной с #15
у Вас получилась привязка к конкретным значениям, а не общее решение, стоит изменить иисх данные -все сломается

Добавлено через 2 минуты
Цитата Сообщение от BonaBerry Посмотреть сообщение
превратить в такое, т.е. середику проинвертировать
я правильно понимаю задание, взять 3ий байт и поменять его с 2ым
BonaBerry
3 / 3 / 0
Регистрация: 21.09.2013
Сообщений: 73
25.03.2014, 16:46  [ТС]     Определить, что старший байт числа равен значению переменной с #16
1. Дана переменная int x = …; Проинвертируйте в этой переменной значения битов двух средних байтов, например:
bla-bla-111111111-000000000-bla-bla
не изм-000000000-111111111-не изм.


Что-то да я не подумала, что число может с консоли вводится.
aLarman
641 / 562 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
25.03.2014, 16:46     Определить, что старший байт числа равен значению переменной с #17
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
int main(int argc, char* argv[])
{
    
        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 & 0x0000FF00; //z это 2ой байт
        cout <<"z1 = " <<z<<endl;
 
        for (int i2=31; i2>=0; i2--) // цикл перебора значений
        {
            vid2=((z>>i2)&1);
            cout <<vid2;
        }
        cout << endl;
 
        int z2= y & 0x00FF0000;//z2 это 3ий байт
        cout <<"z2 = " <<z2<<endl;
        for (int i2=31; i2>=0; i2--) // цикл перебора значений
        {
            vid2=((z2>>i2)&1);
            cout <<vid2;
        }
        cout << endl;
 
 
        int w= (y&0xFF0000FF)|(z<<8)|(z2>>8);// берем 4 и 1ый байт (y&0xFF0000FF) добавляем 2ой байт на место 3его (z<<8) добавляем 3ий байт на место 2го (z2>>8)
        cout <<"w = " <<w<<endl;
 
        for (int i3=31; i3>=0; i3--) // цикл перебора значений
        {
            vid3=((w>>i3)&1);
            cout <<vid3;
        }
        cout << endl;
    system("pause");
    return 0;
}
ValeryS
Модератор
6514 / 4980 / 460
Регистрация: 14.02.2011
Сообщений: 16,495
25.03.2014, 17:04     Определить, что старший байт числа равен значению переменной с #18
Цитата Сообщение от BonaBerry Посмотреть сообщение
ана переменная int x = …; Проинвертируйте в этой переменной значения битов двух средних байтов, например:
я же показал
Цитата Сообщение от ValeryS Посмотреть сообщение
a^=0x00FFFF00;
исключающие ИЛИ(^) с 1 даст инверсию бита
смотри

0 0 0
0 1 1
1 0 1
1 1 0
aLarman
641 / 562 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
25.03.2014, 17:11     Определить, что старший байт числа равен значению переменной с #19
Цитата Сообщение от ValeryS Посмотреть сообщение
исключающие ИЛИ(^) с 1 даст инверсию бита
там вроде поменять местами байты...или я не совсем понял
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.03.2014, 17:17     Определить, что старший байт числа равен значению переменной с
Еще ссылки по теме:

Определить, равен ли квадрат числа учетверенной сумме кубов его цифр C++
C++ Определить, равен ли квадрат числа учетверенной сумме кубов его цифр
Определить порядок хранения байт 16-ричного числа C++
Считать старший байт числа C++
C++ Вывести старший и младший байт заданного целого положительного числа в шестнадцатиричном и двоичном виде

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

Или воспользуйтесь поиском по форуму:
ValeryS
Модератор
6514 / 4980 / 460
Регистрация: 14.02.2011
Сообщений: 16,495
25.03.2014, 17:17     Определить, что старший байт числа равен значению переменной с #20
Цитата Сообщение от aLarman Посмотреть сообщение
там вроде поменять местами байты...
ага
Цитата Сообщение от BonaBerry Посмотреть сообщение
Проинвертируйте в этой переменной значения битов двух средних байтов,
а перемешенные просто показалось, из за исходных данных
Цитата Сообщение от BonaBerry Посмотреть сообщение
111111111-000000000
проинвертируй, и кажется что они моменялись
Yandex
Объявления
25.03.2014, 17:17     Определить, что старший байт числа равен значению переменной с
Ответ Создать тему
Опции темы

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