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

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

Войти
Регистрация
Восстановить пароль
 
vardog
0 / 0 / 0
Регистрация: 16.11.2012
Сообщений: 62
#1

Поразрядная операция & - C++

31.10.2013, 22:33. Просмотров 449. Ответов 5
Метки нет (Все метки)

Здравствуйте!
У меня есть программа:

C
1
2
3
4
5
6
7
8
9
10
11
12
unsigned short int con(unsigned short int x, unsigned short int y, unsigned short int z);
unsigned short int con(unsigned short int x, unsigned short int y, unsigned short int z) { return x&y&z; }
 
#include <stdio.h>
 
int main(void) {
   
   printf("\n\nConjction:");
   printf("\nConjction [3402,101,5678] = %d", con(3402,101,5678));
   
   return 0;
}
Т.е. есть три числа (от 0 до 65535), Я хочу реализовать примитивную операцию коньюнкции.
В результате отработки программы получаю 0.
Проверил вручную:

3402 -> 0000 1101 0100 1010
101 -> 0000 0000 0110 0101
5678 -> 0001 0110 0010 1110
x&y&z-> 0000 0000 0000 0000


Задание: Разработать функцию,выполняющую базовую логическую операцию - коньюнкция для 3 входов типа short.Где ЛОЖЬ: 0-100, ИСТИННА - 101-65535
Собственно вопрос в следующем: Верно ли работает моя программа?

Добавлено через 2 минуты
Просто мне казалось что для 3402,101,5678 моя функция коньюнкции должна бы выдать значение ИСТИННА (т.е. быть как минимум 101)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.10.2013, 22:33
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Поразрядная операция & (C++):

Поразрядная конъюнкция / Дизъюнкция / Исключающие, (&), (|), (^) - C++
... cout &lt;&lt; &quot;\n 6 &amp; 5 = &quot; &lt;&lt; (6 &amp; 5); cout &lt;&lt; &quot;\n 6 | 5 = &quot; &lt;&lt; (6 | 5); cout &lt;&lt; &quot;\n 6 ^ 5 = &quot; &lt;&lt; (6 ^ 5); ... ...

Оператор if и логическая операция И (AND) && - C++
Вод подскажите что будет быстрей обрабатываться процессором: if(!a&amp;&amp;!b) { a+b; } или

Побитовая операция & - C++
Даны два массива с числами в десятичной системе счисления, разделенные пробелами. Нужно реализовать побитовую операцию &amp; сравнивающую...

Побитовая операция & - C++
Скажите пожалуста, что значит эта запись , и как записать в другом варианте? ... int x=5; while (x &amp; 1) {....

Операция получения адреса & и vector - C++
Здравствуйте. Работает ли Операция получения адреса (&amp;) в векторе? Просто есть пример в книги, но про вектор ничего не сказано....

Объяснить, что делает операция *& и чем она отличается от простого указателя? - C++
Пожалуйста объясните что делает этот оператор...чем он отличается от простого указателя?

5
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
31.10.2013, 22:50 #2
Кажется, неверно. Я так понял условие, что числа от 0 до 100 включительно считаются ложью, от 101 до 65535 включительно — истиной. Биты здесь ни при чём.
C
1
2
3
4
5
6
#include <stdbool.h>
 
bool conj(unsigned short a, unsigned short b, unsigned short c)
{
    return ((a > 100) && (b > 100) && (c > 100));
}
Ну или так:
C
1
2
3
4
unsigned short conj(unsigned short a, unsigned short b, unsigned short c)
{
    return 100 + ((a > 100) && (b > 100) && (c > 100));
}
1
vardog
0 / 0 / 0
Регистрация: 16.11.2012
Сообщений: 62
31.10.2013, 23:00  [ТС] #3
наверное действительно так и есть...
А с позволения еще вопросик, мне необходимы еще и функции инверсии, дизьюнкции,сложение по модудю 2
Вот с первыми двумя я то справлюсь, а как быть сложение по модулю!?!

Вот я как расчитывал реализовать:
unsigned short int con(unsigned short int x, unsigned short int y, unsigned short int z) { return x^y^z; }

Можете помочь с этим, если не сложно
0
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
31.10.2013, 23:14 #4
Два варианта:
1. a ⊕ b = (a ∨ b) ∧ ¬(a ∧ b), раскрываете исключающее ИЛИ руками.
2. short --> bool --> short (0 или 1). Там сработает побитовое ИЛИ Потом превращаете обратно.
1
vardog
0 / 0 / 0
Регистрация: 16.11.2012
Сообщений: 62
01.11.2013, 00:52  [ТС] #5
блин) Чет у меня мозгов ток на это хватило:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
unsigned short modulo_two(unsigned short a, unsigned short b, unsigned short c) {
   int count = 0;
   
   if(a > 100) { count++; }
   if(b > 100) { count++; }
   if(c > 100) { count++; }
   
   if(count != 0 && count != 2) {
      return 1;
   }
   else {
      return 0;
   }
}
Это вот ессли верить таблицы:
a b c Result
0 0 0 0
1 0 0 1
0 1 0 1
1 1 0 0
0 0 1 1
1 0 1 0
0 1 1 0
1 1 1 1


А если у меня будет не три а 4 переменных ил 10 - мне чтож постоянно таблицы истинности вручную состовлять
видать зря я дискретку не учил
0
aLarman
643 / 564 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
Завершенные тесты: 1
01.11.2013, 12:09 #6
Цитата Сообщение от vardog Посмотреть сообщение
В результате отработки программы получаю 0
операция & производить побитовое умножение
Цитата Сообщение от vardog Посмотреть сообщение
3402 -> 0000 1101 0100 1010
101 -> 0000 0000 0110 0101
5678 -> 0001 0110 0010 1110
x&y&z-> 0000 0000 0000 0000
по-моему удивляться не чему, что умножая биты Вы получаете 0, потому что тут нет стоящих 1 на одном месте во всех 3х числах
0|0|0|0 1|1|0|1 0|1|0|0 1|0|1|0
0|0|0|0 0|0|0|0 0|1|1|0 0|1|0|1
0|0|0|1 0|1|1|0 0|0|1|0 1|1|1|0
0
01.11.2013, 12:09
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.11.2013, 12:09
Привет! Вот еще темы с ответами:

Как работает операция взятия адреса "&"? - C++
В каждой переменной есть адрес,так вот,когда операция взятия адреса берёт адрес,она его копирует?И тогда адрес остаётся в переменной и в...

Ошибка: multiple definition of `void std::swap<A>(A&amp;, A&amp;) - C++
Хочу специализировать swap для своего класса. Получаю ошибку. Вот код:#ifndef A_H #define A_H #include &lt;string&gt; class A { ...

Почему friend ostrem& operator <<(ostream& outs, const Rational&); - invalid function declaration? - C++
Пытаюсь скомпилировать программу пишет friend ostrem&amp; operator &lt;&lt;(ostream&amp; outs, const Rational&amp;); - invalid function declaration. ...

В заштрихованную фигуру бросают точки с координатами x и y. Получить координаты первой точки не попавшей в эту область (фигура x*x+y*y<25&&x*x+y*y>=9& - C++
В заштрихованную фигуру бросают точки с координатами x и y. Получить координаты первой точки не попавшей в эту область (фигура...


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

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

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