0 / 1 / 0
Регистрация: 12.12.2014
Сообщений: 26
1

Не могу разобрать требование задачи (простой)

17.01.2018, 22:43. Показов 3130. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Хоть и написал, что "простой", я лишь занимаюсь самостоятельным разбором языка C#, и сижу через сайты на подобии itvdn.
И вроде все идет хорошо, задания везде пока выполнял, но меня застопорил один момент с задачей, не совсем ее понимаю, уже приблизительное решение есть.

"Известно, что у чисел, которые являются степенью двойки, только один бит имеет значение 1
Используя Visual Studio, создайте проект по шаблону ConsoleApplication
Напишите программу, которая будет выполнять проверку - является ли указанное число степенью двойки или нет"


Написал собственно код

C#
1
2
Console.WriteLine ("Введите число, которое желаете проверить"); 
Int32 a = Int.Parse(Console.ReadLine());
Так как домашнее задание связано было с битами их сдвиги и т.д. и о логических операциях в целом описал в проекте код следующим способом

C#
1
2
3
4
5
6
7
8
9
10
            s = x & (x - 1);
 
            if (s == 0)
            {
                да
            }
            else
            {
               нет
            }
Но суть моей проблемы осталась в том, что я не понимаю почему в условии задачи указана следующая строка
"Известно, что у чисел, которые являются степенью двойки, только один бит имеет значение 1"
А в другой которую мне нужно решить
"Известно, что у четных чисел младший бит имеет значение 0"
Что данной строкой хотели подчеркнуть, и как это влияет собственно вообще на требование?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.01.2018, 22:43
Ответы с готовыми решениями:

Не могу понять требование задачи
Входной файл содержит набор целых десятичных чисел, каждое из которых не превышает 30 десятичных...

Не могу разобраться с алгоритмом(блок схемы) для решения простой задачи
Вводятся числа a и b. Найти количество чисел в диапазоне , у которых последняя цифра равна 7. Вот...

Хочу собрать компьютер бюджет 1100$ - задачи и требование в теме!
Здравствуйте. Появилась возможно (и необходимость) купить новый системник пришел на ваш форум по...

Делегаты, разобрать простой пример
Добрый день. Почему выводит на экран только: "2"? Я ожидал увидеть: "12" delegate int MyDel();...

9
3462 / 2469 / 1170
Регистрация: 14.08.2016
Сообщений: 8,161
17.01.2018, 22:57 2
Лучший ответ Сообщение было отмечено vaesmon123 как решение

Решение

C#
1
2
3
4
            for(int i = 2; i < 34; i+=2)
            {
                Console.WriteLine(i + " = " + Convert.ToString(i,2));
            }
запусти и сам все увидишь
1
0 / 1 / 0
Регистрация: 12.12.2014
Сообщений: 26
17.01.2018, 23:04  [ТС] 3
Спасибо =) понял)
0
Эксперт .NET
5864 / 4741 / 2940
Регистрация: 20.04.2015
Сообщений: 8,361
17.01.2018, 23:05 4
Лучший ответ Сообщение было отмечено vaesmon123 как решение

Решение

Цитата Сообщение от vaesmon123 Посмотреть сообщение
Что данной строкой хотели подчеркнуть, и как это влияет собственно вообще на требование?
Цитата Сообщение от vaesmon123 Посмотреть сообщение
Известно, что у чисел, которые являются степенью двойки, только один бит имеет значение 1
Видимо предполагается, что нужно посчитать количество бит, равных 1. И, если такой бит один, то число является степенью двойки.
Цитата Сообщение от vaesmon123 Посмотреть сообщение
Известно, что у четных чисел младший бит имеет значение 0
Проверить младший бит. Если он равен 0, то число четное. Хотя можно по аналогии с первым решением обойтись условием
C#
1
2
3
4
if ((x & 1) == 0 )
{четное}
else
{нечетное}
1
0 / 1 / 0
Регистрация: 12.12.2014
Сообщений: 26
17.01.2018, 23:24  [ТС] 5
Там собственно где про 0
Мне необходимо сделать проверку на четность )
Что собственно, да), спасибо.

Добавлено через 13 минут
С проверкой четности в итоге пришел к такому выводу, более в лоб, если по условию младший бит = 0
То любые значения, где есть в конце единица - это уже непарное.

Поэтому мы сместим число 0011 0011 влево на 7
и получим 1000 0000, и оно не будет совпадать с тем, что необходимо, т.е. да - это непарное.

По поводу if ((x & 1) == 0 ), понял метод - но решил найти другой способ)

C#
1
2
3
4
5
6
7
Int32 a = Convert.ToByte(Console.ReadLine());
Int32 s = (byte)(a << 7);
if (s == 0){
да
}{
нет
}
Хотя для оптимизации лучше использовать тип переменной Byte =)

Спасибо всем еще раз за помощь, очень сильно помогли!!!
Думал, что так и застряну в недоумении
0
Эксперт .NET
5864 / 4741 / 2940
Регистрация: 20.04.2015
Сообщений: 8,361
17.01.2018, 23:27 6
Цитата Сообщение от vaesmon123 Посмотреть сообщение
пришел к такому выводу, более простому, если по условию младший бит = 0
То любые значения, где есть в конце единица - это уже непарное.
Ну как бы это и сказано в фразе:
Цитата Сообщение от vaesmon123 Посмотреть сообщение
Известно, что у четных чисел младший бит имеет значение 0
1
0 / 1 / 0
Регистрация: 12.12.2014
Сообщений: 26
17.01.2018, 23:56  [ТС] 7
Это я понял, благодаря вам обоим, включая наглядного примера Diamante. =) , я написал лишь из-за того, что ИСХОДЯ из задачи ТО делаем то-то, вообщем не суть =)

Добавлено через 4 минуты
А как тему закрыть?
0
Эксперт .NET
5864 / 4741 / 2940
Регистрация: 20.04.2015
Сообщений: 8,361
17.01.2018, 23:58 8
Цитата Сообщение от vaesmon123 Посмотреть сообщение
А как тему закрыть?
Никак.
См. п.2.3
0
0 / 1 / 0
Регистрация: 12.12.2014
Сообщений: 26
17.01.2018, 23:59  [ТС] 9
А ну все, понятно =), тогда оставлю так)
0
Эксперт .NET
17210 / 12664 / 3321
Регистрация: 17.09.2011
Сообщений: 20,938
18.01.2018, 08:37 10
Цитата Сообщение от vaesmon123 Посмотреть сообщение
Хотя для оптимизации лучше использовать тип переменной Byte
Наоборот — лишнее конвертирование.
Побитовые операции не определены для типа byte, значит при их использовании значение и результат будут конвертированы в int.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.01.2018, 08:37
Помогаю со студенческими работами здесь

Простой декодер - разобрать принцип
На PINB.3 приходит уже инверсный 32-х битный код, он соответствует (const_vkl_PC, const_reset_PC)...

Помогите разобрать простой класс для рисования прямоугольнка в окне
Написал два класса, по идеи у меня в окошке должен рисоваться прямоугольник, но он не рисуется, че...

разобрать решение задачи на с++
Помогите разобрать задачу, я не особо разбираюсь в коде, но задание уже до завтра отправить просто...

Прошу разобрать олимпиадные задачи
Здравствуйте наткнулся на олимпиадные задачи, не могу понять как их решить, не получается выразить...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru