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

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

Восстановить пароль Регистрация
 
vardog
0 / 0 / 0
Регистрация: 16.11.2012
Сообщений: 62
31.10.2013, 22:33     Поразрядная операция & #1
Здравствуйте!
У меня есть программа:

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)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 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));
}
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; }

Можете помочь с этим, если не сложно
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 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). Там сработает побитовое ИЛИ Потом превращаете обратно.
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 - мне чтож постоянно таблицы истинности вручную состовлять
видать зря я дискретку не учил
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
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
Yandex
Объявления
01.11.2013, 12:09     Поразрядная операция &
Ответ Создать тему
Опции темы

Текущее время: 07:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru