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

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

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

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

25.03.2014, 11:59. Просмотров 1447. Ответов 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++
C++ функция изменяет старший байт числа на заданное значение не изменяя младший байт
Считать старший байт числа C++
C++ Вывести старший и младший байт заданного целого положительного числа в шестнадцатиричном и двоичном виде
Определить номера строк матрицы, хотя бы один элемент которых равен заданному значению C++
Найти среди двузначных чисел такие, что квадрат числа равен кубу суммы цифр этого числа C++
Определить, равен ли квадрат заданного трехзначного числа кубу суммы цифр этого числа VS2010 C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
642 / 563 / 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
Модератор
6551 / 5017 / 463
Регистрация: 14.02.2011
Сообщений: 16,735
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
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
25.03.2014, 17:11     Определить, что старший байт числа равен значению переменной с #19
Цитата Сообщение от ValeryS Посмотреть сообщение
исключающие ИЛИ(^) с 1 даст инверсию бита
там вроде поменять местами байты...или я не совсем понял
ValeryS
Модератор
6551 / 5017 / 463
Регистрация: 14.02.2011
Сообщений: 16,735
25.03.2014, 17:17     Определить, что старший байт числа равен значению переменной с #20
Цитата Сообщение от aLarman Посмотреть сообщение
там вроде поменять местами байты...
ага
Цитата Сообщение от BonaBerry Посмотреть сообщение
Проинвертируйте в этой переменной значения битов двух средних байтов,
а перемешенные просто показалось, из за исходных данных
Цитата Сообщение от BonaBerry Посмотреть сообщение
111111111-000000000
проинвертируй, и кажется что они моменялись
aLarman
25.03.2014, 17:19
  #21

Не по теме:

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

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

ValeryS
, Мне кажется тут действительно неверно использовано слово при формулировки задания, так как при инвертации края нам не сохранить, сам понимаешь. А суть упражнения как раз, задействовать побитовые логические операции.
ValeryS
Модератор
6551 / 5017 / 463
Регистрация: 14.02.2011
Сообщений: 16,735
26.03.2014, 11:36     Определить, что старший байт числа равен значению переменной с #23
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от 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;
как видишь поменялись местами
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
26.03.2014, 11:45     Определить, что старший байт числа равен значению переменной с #24
Цитата Сообщение от ValeryS Посмотреть сообщение
два первых байта в бите
О_О wtf
ValeryS
26.03.2014, 12:06
  #25

Не по теме:

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

BonaBerry
3 / 3 / 0
Регистрация: 21.09.2013
Сообщений: 73
26.03.2014, 12:30  [ТС]     Определить, что старший байт числа равен значению переменной с #26
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;
используется в простейших шифровшиках/дешифровшиках
и еще один фокус поменять две переменных местами не использую третью
Да, здрово!!! Из серии подобное излечивается подобным.
ValeryS
26.03.2014, 12:42
  #27

Не по теме:

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

BonaBerry
3 / 3 / 0
Регистрация: 21.09.2013
Сообщений: 73
26.03.2014, 16:31  [ТС]     Определить, что старший байт числа равен значению переменной с #28
Дана переменная 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;
    }
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
26.03.2014, 16:38     Определить, что старший байт числа равен значению переменной с #29
Цитата Сообщение от 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;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.03.2014, 16:49     Определить, что старший байт числа равен значению переменной с
Еще ссылки по теме:
Определить порядок хранения байт 16-ричного числа C++
определить равен ли квадрат заданного двухзначного числа C++
C++ Определить, равен ли квадрат числа учетверенной сумме кубов его цифр
Определить, равен ли квадрат числа учетверенной сумме кубов его цифр C++
Дано натуральное число.Определить,сколько раз в нём встречается минимальная цифра(например, для числа 102200 ответ равен 3,для числа 40330-2,для числ C++

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

Или воспользуйтесь поиском по форуму:
ValeryS
Модератор
6551 / 5017 / 463
Регистрация: 14.02.2011
Сообщений: 16,735
26.03.2014, 16:49     Определить, что старший байт числа равен значению переменной с #30
Цитата Сообщение от BonaBerry Посмотреть сообщение
нужно найти интовый диапазон чисел. Который может выглядеть примерно так.
тебе весь перебор нужен?
или предельные значения?
Yandex
Объявления
26.03.2014, 16:49     Определить, что старший байт числа равен значению переменной с
Ответ Создать тему
Опции темы

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