Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
4 / 4 / 1
Регистрация: 20.01.2010
Сообщений: 93

Не пойму пример задачи про поразрядный оператор &

08.10.2013, 22:59. Показов 1386. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
using System; 
 
class ShowBits { 
  static void Main() { 
    int t; 
    byte val;  
  
    val = 123; 
    for(t=128; t > 0; t = t/2) { 
      if((val & t) != 0) Console.Write("1 ");  
      if((val & t) == 0) Console.Write("0 ");  
    } 
  } 
}
Результат: 01111011

Программа выводит двоичное представление числа val. Скажите, почему в цикле for для перебора разрядов используется число 128, которое с каждой итерацией уменьшается на 2? Почему там не может быть просто число 1?
И правильно ли я понимаю, что обход двоичного числа начинается с младшего разряда (то бишь с права налево)?

Спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.10.2013, 22:59
Ответы с готовыми решениями:

Поразрядный оператор И, и его работа
void disp(unsigned u){ for(int t = 128; t > 0; t = t/2) if(u & t)cout << "1 "; else cout << "0 "; cout << endl; Скажем...

Снова про OpenCL в Delphi + программное измерение загрузки CPU & GPU (работающий пример)
Уже более года назад приводил здесь на форуме пример работы с OpenCL в связке с Delphi - ...

Изменить программу так, чтобы выполнялось задание, но не использовался поразрядный оператор ^
#include <iostream> using namespace std; int slog(int n, int m); int main() { setlocale(LC_ALL, "rus_rus.1251"); int n, m; ...

6
212 / 214 / 44
Регистрация: 20.12.2011
Сообщений: 635
09.10.2013, 00:30
Цитата Сообщение от sergIKO Посмотреть сообщение
уменьшается на 2?
уменьшается В 2 раза

по сабжу:
поразрядный оператор & делает такую вещь: проверяет поочередно биты числа, если и там, и там 1, то результат 1, иначе - 0.
число 128: 10000000 - максимальное число с единственной единицей, которое помещается в байт. при делении на 2, эта единица смещается на 1 позицию вправо. в итоге перебираются все биты и сравниваютс с исходным числом для перевода в двоичную систему.
с 1 и умножать на 2 нельзя начать, т.к. результат получится перевёрнутый
0
 Аватар для Spectral-Owl
608 / 583 / 157
Регистрация: 29.06.2010
Сообщений: 1,620
09.10.2013, 12:05
Цитата Сообщение от sergIKO Посмотреть сообщение
перебора разрядов используется число 128, которое с каждой итерацией уменьшается на 2? Почему там не может быть просто число 1?
Цитата Сообщение от sergIKO Посмотреть сообщение
И правильно ли я понимаю, что обход двоичного числа начинается с младшего разряда (то бишь с права налево)?
Ответ на первый вопрос лежит в основе второго. На второй кстати ответ нет, сначала сравнивается самый старший бит, и далее в сторону уменьшения.
А вот если необходимо выводить в обратном порядке, то как раз таки необходимо начинать с единицы, и пока число меньше 128 удваивать его.

в прочем так в двоичное число преобразовывать - велосипед, есть стандартный метод Convert.ToString(число, сс)
0
4 / 4 / 1
Регистрация: 20.01.2010
Сообщений: 93
09.10.2013, 20:18  [ТС]
Цитата Сообщение от Fler Посмотреть сообщение
уменьшается В 2 раза

по сабжу:
поразрядный оператор & делает такую вещь: проверяет поочередно биты числа, если и там, и там 1, то результат 1, иначе - 0.
число 128: 10000000 - максимальное число с единственной единицей, которое помещается в байт. при делении на 2, эта единица смещается на 1 позицию вправо. в итоге перебираются все биты и сравниваютс с исходным числом для перевода в двоичную систему.
с 1 и умножать на 2 нельзя начать, т.к. результат получится перевёрнутый
уменьшается В 2 раза
да, уменьшается В 2 раза - здесь просто описался.

число 128: 10000000 - максимальное число с единственной единицей, которое помещается в байт. при делении на 2, эта единица смещается на 1 позицию вправо.
вот этого автор не уточнял. спасибо.

ну а дальше уже понятно.

p.s. а если бы переводимое число имело бы размер 2 байта ( 16 бит), то, правильно ли я понимаю, что в цикле for тогда вместо числа 128 (2 в 8 степени) использовалось бы число 65536(2 в 16 степени) ???
0
Заблокирован
09.10.2013, 21:21
Да уж, автор этого примера, явно многого не знал.

C#
1
2
3
4
5
 //init
            byte init = 105;
 
            //result
            for (int i = 0; i < 8; i++, init <<= 1) Console.Write((init >=128) ? "1" : "0");
0
4 / 4 / 1
Регистрация: 20.01.2010
Сообщений: 93
09.10.2013, 22:10  [ТС]
Цитата Сообщение от _Mutex Посмотреть сообщение
Да уж, автор этого примера, явно многого не знал.

C#
1
2
3
4
5
 //init
            byte init = 105;
 
            //result
            for (int i = 0; i < 8; i++, init <<= 1) Console.Write((init >=128) ? "1" : "0");
Это Шилдт)) Просто сдвиги чуть позже описываются)

Добавлено через 46 минут
Еще кое-что Шилдт пишет, что когда в старшем разряде установлена 1, это значит , что число будет с отрицательным знаком. Почему тогда 10000000 - Это 128 ( с плюсом). Выходит утверждение не верно?
0
Заблокирован
09.10.2013, 22:44
Цитата Сообщение от sergIKO Посмотреть сообщение
Почему тогда 10000000 - Это 128 ( с плюсом). Выходит утверждение не верно?
потому что это byte, а не sbyte.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.10.2013, 22:44
Помогаю со студенческими работами здесь

query='SELECT * FROM resume WHERE ' & ''' & RecSet('place')& ''' & '=' & '''& s_loc &''' & - что не так?
упростил для краткости запрос. в чем ошибка? RecSet - это коннекшн. query='SELECT * FROM resume WHERE ' &amp; ''' &amp;...

Оператор && не может применяться к операндам типа string и int
Оператор &amp;&amp; не может применяться к операндам типа string и string string a, b, c, d; a = &quot;Avet&quot;; ...

Как работает && (оператор условной обработки команд)?
Приветствую ! dir D:\TMP\* /a-d 2&gt;nul &gt;nul &amp;&amp; echo есть файлы Обьясните, пожалуйста, почему это работает ? ) Разве команда...

Оператор && - добавить в одну строчку Memo текст с ListBox1 и ListBox2
значит нужно добавить в одну строчку Memo текст с ListBox1 и ListBox2 хотел реализовать через оператор &quot;и&quot; &amp;&amp; но видает...

Чем оператор || отличается от оператора && ?
Приведите простые примеры, никак до мозгов не доходит)


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru