Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 23.02.2015
Сообщений: 23
1
.NET 4.x

Операторы сдвига

24.03.2017, 14:36. Показов 1249. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Возник вопрос, в javascript есть такой оператор как
Javascript
1
a >>> b
он
Сдвигает двоичное представление a на b битов вправо, отбрасывая сдвигаемые биты и добавляя нули слева

Как сделать тоже самое с C#?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.03.2017, 14:36
Ответы с готовыми решениями:

Операторы сдвига узла вперед и назад
using System; namespace Examples.Collections.Generic { public class Node<T> : IPrintable,...

Определить арифметические операторы и операторы сравнения (если возможно)
Для прямоугольного параллелепипеда определить арифметические операторы и операторы сравнения (если...

Операторы отношения и логические операторы
Нужно ли знать на память таблицу истинности для логических операторов и операций импликации?может...

Перегрузка оператора сдвига
Делал перегруз оператора сдвига проблемы в строках 25 и 29 (для нестатического поля, метода или...

12
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
24.03.2017, 14:45 2
Цитата Сообщение от Coool Посмотреть сообщение
Как сделать тоже самое с C#?
a >> b
0
0 / 0 / 0
Регистрация: 23.02.2015
Сообщений: 23
24.03.2017, 14:50  [ТС] 3
aquaMakc, не канает с отрицательными числами...

Добавлено через 1 минуту
aquaMakc,

вот в чем трабл
Для отрицательных чисел - результат работы разный. Например, -9 >>> 2 даст 1073741821, отличное от -9 >> 2 (дает -3):
0
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
24.03.2017, 14:52 4
Coool, логично же, знаковые числа в старшем бите содержат знак (именно по этому максимальное значение беззнакового числа в 2 раза больше, чем знакового). Вы сдвигаете на 2 разряда вправо, соответственно сдвигается и бит знака, который воспринимается уже, как бит значения, а бит знака становится нулём.
0
Администратор
Эксперт .NET
17022 / 13374 / 5218
Регистрация: 17.03.2014
Сообщений: 27,352
Записей в блоге: 1
24.03.2017, 14:53 5
Coool, >> + & с маской 0x7FFFFFFF которая сбросит старший бит
0
0 / 0 / 0
Регистрация: 23.02.2015
Сообщений: 23
24.03.2017, 14:53  [ТС] 6
OwenGlendower, можно пример пожалуйста для танкиста
0
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
24.03.2017, 14:57 7
Coool, прошу прощения, ввёл в заблуждение, в шарпе получается -3.
0
Администратор
Эксперт .NET
17022 / 13374 / 5218
Регистрация: 17.03.2014
Сообщений: 27,352
Записей в блоге: 1
24.03.2017, 14:58 8
Coool,
C#
1
(a >> b) & 0x7FFFFFFF
0
0 / 0 / 0
Регистрация: 23.02.2015
Сообщений: 23
24.03.2017, 15:01  [ТС] 9
OwenGlendower, значит я не тупой, результаты разные в сравнении с JS

-43>>>2 = 1073741813

(-43 >> 2) & 0x7FFFFFFF = 2147483637
0
Администратор
Эксперт .NET
17022 / 13374 / 5218
Регистрация: 17.03.2014
Сообщений: 27,352
Записей в блоге: 1
24.03.2017, 15:24 10
Лучший ответ Сообщение было отмечено Coool как решение

Решение

Coool, попробуй по такой формуле
C#
1
(a >> b) & ~(int.MinValue >> b-1)
1
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
24.03.2017, 15:25 11
OwenGlendower, В JS на число выделяется 64 бита, наш int - 32. Возможно автору придётся перейти на long.
0
0 / 0 / 0
Регистрация: 23.02.2015
Сообщений: 23
25.03.2017, 05:15  [ТС] 12
OwenGlendower, о, вот это уже работает, спасибки

Добавлено через 13 часов 47 минут
OwenGlendower, тут опять проблемка, если первое число отрицательное то выдает не правильный результат
-1 >>> 8 ^ -925412992 ==-936857985
((-1 >> 8) & ~(int.MinValue >> 2 - 1)) ^ -925412992==-148328833
0
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
25.03.2017, 05:34 13
Цитата Сообщение от Coool Посмотреть сообщение
(int.MinValue >> 2
не два а восемь
1
25.03.2017, 05:34
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.03.2017, 05:34
Помогаю со студенческими работами здесь

удаления без сдвига
Как сделать так что бы при удаление строки остальные которые находятся ниже не сдвигались, а то...

Организация сдвига элементов в матрице
6. Дана матрица А, выполнить циклический сдвиг вправо на одну позицию элементов каждой строки,...

Подпрограмма циклического сдвига направо
Реализовать подпрограмму циклического сдвига направо . Код максимум пишется на 3-4 строчки. Входные...

Перегрузка оператора побитового сдвига <<
Здравствуйте, подскажите, пожалуйста, как правильно перегрузить оператор побитового сдвига?public...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru