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

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

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

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

25.03.2014, 11:59. Просмотров 1466. Ответов 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.

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
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-не изм.


Что-то да я не подумала, что число может с консоли вводится.
0
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;
}
1
ValeryS
Модератор
6633 / 5040 / 466
Регистрация: 14.02.2011
Сообщений: 16,849
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
1
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
25.03.2014, 17:11 #19
Цитата Сообщение от ValeryS Посмотреть сообщение
исключающие ИЛИ(^) с 1 даст инверсию бита
там вроде поменять местами байты...или я не совсем понял
0
ValeryS
Модератор
6633 / 5040 / 466
Регистрация: 14.02.2011
Сообщений: 16,849
25.03.2014, 17:17 #20
Цитата Сообщение от aLarman Посмотреть сообщение
там вроде поменять местами байты...
ага
Цитата Сообщение от BonaBerry Посмотреть сообщение
Проинвертируйте в этой переменной значения битов двух средних байтов,
а перемешенные просто показалось, из за исходных данных
Цитата Сообщение от BonaBerry Посмотреть сообщение
111111111-000000000
проинвертируй, и кажется что они моменялись
0
aLarman
25.03.2014, 17:19
  #21

Не по теме:

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

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

Не по теме:

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

0
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;
используется в простейших шифровшиках/дешифровшиках
и еще один фокус поменять две переменных местами не использую третью
Да, здрово!!! Из серии подобное излечивается подобным.
0
ValeryS
26.03.2014, 12:42
  #27

Не по теме:

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

0
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;
    }
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;
}
0
ValeryS
Модератор
6633 / 5040 / 466
Регистрация: 14.02.2011
Сообщений: 16,849
26.03.2014, 16:49 #30
Цитата Сообщение от BonaBerry Посмотреть сообщение
нужно найти интовый диапазон чисел. Который может выглядеть примерно так.
тебе весь перебор нужен?
или предельные значения?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.03.2014, 16:49
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
26.03.2014, 16:49
Ответ Создать тему
Опции темы

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