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

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

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

Восстановить пароль

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

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

Возможностью проверять состояние отдельных двоичных разрядов с помощью по* разрядного оператора & можно воспользоваться для написания программы, в которой отдельные двоичные разряды проверяемого значения типа byte приводятся в двоич* ной форме. Ниже показан один из способов написания такой программы.

// Показать биты, составляющие байт.
Код:
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 ");
        }  
    } 
}
Выполнение этой программы дает следующий результат.
0 1 1 1 1 0 1 1
В цикле for из приведенной выше программы каждый бит значения переменной val проверяется с помощью поразрядного оператора И, чтобы выяснить, установлен ли этот бит или сброшен. Если он установлен, то выводится цифра 1, а если сброшен, то выводится цифра 0.

Что я понимают под словом проверка отдельных битов:
(123 & 128)
01111011
10000000

(123 & 64)
01111011
01000000

(123 & 32)
01111011
00100000

(123 & 16)
01111011
00010000

(123 & 8)
01111011
00001000

(123 & 4)
01111011
00000100

(123 & 2)
01111011
00000010

(123 & 1)
01111011
00000001

Если в выражении
Код:
 if(val & t) != 0)
заменить оператор неравенство на равенство ( == ) и заменить 0 на 1. Почему такой результат? :
0
0
1

Подскажите правильно ли я понял процесс проверки отдельного бита? Если есть нюансы просветите меня.

Последний раз редактировалось bITA666; 05.11.2021 в 14:03.
bITA666 вне форума Ответить с цитированием
Старый 05.11.2021, 20:42   #2
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,708
По умолчанию

Странно. Результат не соответствует программе. Тестируется 8 бит, а в выдаче только 3 значения.
А можно проще:
Код:
  
      for (t=l28; t > 0; t = t/2) 
            if((val & t) != 0) Console.Write("1 "); else Console.Write("0 ");
digitalis вне форума Ответить с цитированием
Старый 05.11.2021, 20:44   #3
bITA666
Форумчанин
 
Аватар для bITA666
 
Регистрация: 22.03.2019
Сообщений: 115
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
Странно. Результат не соответствует программе. Тестируется 8 бит, а в выдаче только 3 значения.
А можно проще:
Код:
  
      for (t=l28; t > 0; t = t/2) 
            if((val & t) != 0) Console.Write("1 "); else Console.Write("0 ");
Так у меня и вопрос в чем разница? Когда ! = и ==
bITA666 вне форума Ответить с цитированием
Старый 05.11.2021, 21:08   #4
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,708
По умолчанию

В чём разница?!!? Запрашиваем тестирование 8 бит, получаем 3 результата? БСК! Получается, что не от той стенки гвоздь ехе-шник не от этого исходника.
А одновременная замена != и "1 " на == и "0 " - это абсолютно одно и то же.

Последний раз редактировалось digitalis; 05.11.2021 в 21:31.
digitalis вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поразрядные операции 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
Поразрядные операции Максикок Помощь студентам 1 18.11.2010 20:23
Поразрядные операции eds Общие вопросы C/C++ 1 30.10.2008 10:29