Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.11.2021, 13:58   #1
bITA666
Форумчанин
 
Аватар для bITA666
 
Регистрация: 22.03.2019
Сообщений: 115
Злость Поразрядные операторы.

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

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

В предыдущей теме из книги Шилда, был такой пример:
Код:
using System;
class IsOdd{
    static void Main(){
        ushort num;
        num = 10;
    
        if((num & 1) == 1)
            Console.WriteLine("Не выводится."):

        num = 11;

        if((num & 1) == 1)
            Console.WriteLine(num + " - нечетное число.");
    }
}
Результат: 11 - нечетное число.

Если смотреть в двоичном представлении:
Код:
num = 10;
if((num & 1) == 1)
00001010
&
00000001

Результат:00000000
Код:
num = 11;
if((num & 1) == 1)
00001011
&
00000001

Результат:00000001

В обоих операторах if из приведенной выше программы выполняется поразрядная операция И над числовыми значениями переменной num и 1. Если младший двоичный разряд числового значения переменной num установлен. т.е содержит двоичную 1, результат num & 1 оказывается равным 1. В противном случае он равен 0.

Вопрос??????
Если мы говорим что младший разряд установлен то выводится 1 если нет то выводится 0. По результату видно что при нечетном числе 11 младший разряд установлен.
Я так понимаю что мы применяем такую же методику в следующем коде.


Код:
using System;
class ShowBits { 
    static void Main() { 
        int t;
        byte val;
        val = 123;
        for (t=l28; t > 0; t = t/2) {
            if((val & t) != 0) Console.Write("1 ");
            if((val & t) == 0) Console.Write("0 ");
        }  
    } 
}
Результат: 01111011

Проблема моего непонимания заключается именно в данном примере:
Код:
if((val & t) != 0)
И
Код:
if((val & t) == 1)
Идентичный оператор if с неидентичным условием на ваш взгляд но не на мой.
Если вспомним что говорилось в книжке: Если младший двоичный разряд числового значения переменной num установлен. т.е содержит двоичную 1, результат num & 1 оказывается равным 1. В противном случае он равен 0.

Но даже когда мы выполняем условие
Код:
if((val & t) == 0)
01111011
&
10000000
Младший двоичный разряд равен 0.
Результат: 0

Выполняем следующую проверку переменой val.
01111011
&
01000000
Младший двоичный разряд равен 0.

Вопрос! так почему при условии if((val & t) != 0) и if((val & t) == 1) Разные результаты, если в обоих случаях мы получаем 1 и я уже не говорю о том что.... Младший двоичный разряд равен 0.


Спасибо за терпение!
bITA666 вне форума Ответить с цитированием
Старый 24.11.2021, 14:02   #2
ForenLi
Форумчанин
 
Регистрация: 02.06.2021
Сообщений: 515
По умолчанию

Вы забываете про другие разряды:
Код:
10 & 10 = 10 != 0, но != 1
01 & 10 = 0
01 & 01 = 1 != 0, == 1
ForenLi вне форума Ответить с цитированием
Старый 24.11.2021, 14:19   #3
bITA666
Форумчанин
 
Аватар для bITA666
 
Регистрация: 22.03.2019
Сообщений: 115
По умолчанию

Цитата:
Сообщение от ForenLi Посмотреть сообщение
Вы забываете про другие разряды:
Код:
10 & 10 = 10 != 0, но != 1
01 & 10 = 0
01 & 01 = 1 != 0, == 1
01111011
&
01000000
Здесь какой должен быть результат поразрядного оператора & ?
По моему мнению 1. При условии if((val & t) == 1).
bITA666 вне форума Ответить с цитированием
Старый 24.11.2021, 14:24   #4
ForenLi
Форумчанин
 
Регистрация: 02.06.2021
Сообщений: 515
По умолчанию

Цитата:
Сообщение от bITA666 Посмотреть сообщение
Здесь какой должен быть результат поразрядного оператора & ?
01000000

Цитата:
Сообщение от bITA666 Посмотреть сообщение
По моему мнению 1. При условии if((val & t) == 1).
Нет
ForenLi вне форума Ответить с цитированием
Старый 24.11.2021, 14:26   #5
bITA666
Форумчанин
 
Аватар для bITA666
 
Регистрация: 22.03.2019
Сообщений: 115
По умолчанию

Цитата:
Сообщение от ForenLi Посмотреть сообщение
01000000


Нет
Ну так объясните почему нет?
Я могу так же сказать что да.
Но от этого суть не поменяется.
bITA666 вне форума Ответить с цитированием
Старый 24.11.2021, 14:29   #6
ForenLi
Форумчанин
 
Регистрация: 02.06.2021
Сообщений: 515
По умолчанию

Так сделайте опрерацию И поразрядно:
01111011
&
01000000
-----------
01000000

01000000 != 00000001
ForenLi вне форума Ответить с цитированием
Старый 24.11.2021, 14:32   #7
bITA666
Форумчанин
 
Аватар для bITA666
 
Регистрация: 22.03.2019
Сообщений: 115
По умолчанию

Цитата:
Сообщение от ForenLi Посмотреть сообщение
Так сделайте опрерацию И поразрядно:
01111011
&
01000000
-----------
01000000

01000000 != 00000001
Ну вот более подробно. Благодарю.
bITA666 вне форума Ответить с цитированием
Старый 24.11.2021, 14:34   #8
ForenLi
Форумчанин
 
Регистрация: 02.06.2021
Сообщений: 515
По умолчанию

Так это везде есть... https://ru.wikipedia.org/wiki/%D0%91...86%D0%B8%D1%8F
ForenLi вне форума Ответить с цитированием
Старый 24.11.2021, 14:34   #9
bITA666
Форумчанин
 
Аватар для bITA666
 
Регистрация: 22.03.2019
Сообщений: 115
По умолчанию

Цитата:
Сообщение от ForenLi Посмотреть сообщение
Так это везде есть... https://ru.wikipedia.org/wiki/%D0%91...86%D0%B8%D1%8F
От души! Спасибо.
bITA666 вне форума Ответить с цитированием
Старый 30.11.2021, 17:50   #10
bITA666
Форумчанин
 
Аватар для bITA666
 
Регистрация: 22.03.2019
Сообщений: 115
По умолчанию

Цитата:
Сообщение от bITA666 Посмотреть сообщение
Ну вот более подробно. Благодарю.
Привет!
Подскажи пожалуйста почему
01111011
&
01000000
-----------
01000000 != 00000001

Почему тогда:

01000000 не может быть == 00000000?

Я так понял из за разряда. Потому что разряд получается (01000000) 64 а нам нужно что бы наименьший разряд был 0?

Последний раз редактировалось bITA666; 30.11.2021 в 17:54.
bITA666 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поразрядные операторы. bITA666 Помощь студентам 3 05.11.2021 21:08
Поразрядные операции c++ Artem78 Общие вопросы C/C++ 1 10.12.2013 13:36
Поразрядные операторы,операторы сдвига alekopoko Общие вопросы C/C++ 1 11.04.2013 23:40
Поразрядные операции Sv. Общие вопросы C/C++ 7 09.11.2012 00:15
Поразрядные операции eds Общие вопросы C/C++ 1 30.10.2008 10:29