powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / побитовый сдвиг
43 сообщений из 43, показаны все 2 страниц
побитовый сдвиг
    #36080097
salom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть
byte a = 1;
нужно в нем закодировать разные значения:
если (условие1), тов первом разряде 1 , если (!условие1), то 0
если (условие2), тов во втором разряде 1 , если (!условие2), то 0
и т.д.
единица могут быть в нескольких разрядах одновременно
a <<= 1; - это если бы двигать одну и туже единицу, а как их выставлять в нужный разряд??

и как потом расшифровать разряды
...
Рейтинг: 0 / 0
побитовый сдвиг
    #36080140
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
salom,

в цикле, или одно за другим -

создаете беззнаковое целое число, = 1
сдвигаете его на нужную позицию - в соответствии с вашей кодировкой битов.
складываете с предыдущим (простым сложением можно, но если контролируете чтобы биты не дублировались)

по выходу из цикла у вас будет число, с битами, установленными в нужном месте.

расшифровка:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
                        uint allBits = m_bmpValue;
			uint maskFirstBit = uint.MaxValue;
			maskFirstBit--;
			int shift = 0;
			while (allBits > 0)
			{
				uint tempBit = allBits | maskFirstBit;
				tempBit = tempBit - maskFirstBit;
				if (tempBit == 1)
				{
					uint bitOne = tempBit << shift;
					string descr = GetInfoFromServer(bitOne).Trim(); // тут по номеру бита получаем о нем разьяснение, из внешней таблицы
					if (descr.Length > 0)
					{
						result.AppendLine(descr);
					}
					else
					{
						result.AppendLine("bit not defined");
					}
				}
				shift++;
				allBits = allBits >> 1;				
			}


...
Рейтинг: 0 / 0
побитовый сдвиг
    #36080143
Фотография smeh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
System.Collections.BitArray
вам в помощь
...
Рейтинг: 0 / 0
побитовый сдвиг
    #36080187
Gatman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть в c# такие операторы
:
&, |, ^
...
Рейтинг: 0 / 0
побитовый сдвиг
    #36094194
salom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А как фильтр для датагрид сделать с проверкой : стоит ли в разряде Change единица
Код: plaintext
1.
                string filter = "Status & " + Change + "=" + Change;
                ((DataView)dt3.DefaultView).RowFilter = filter;

Не работает
...
Рейтинг: 0 / 0
побитовый сдвиг
    #36094213
vagner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В лоб никак. SQL не поддерживает битовых операторов.
...
Рейтинг: 0 / 0
побитовый сдвиг
    #36094316
Ugums
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно использовать следующий фильтр:
Код: plaintext
1.
"Convert((columnName - columnName % n) / n, 'System.Int32') % 2 = 1"
где n - степень двойки
...
Рейтинг: 0 / 0
побитовый сдвиг
    #36094498
salom,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
// стоит ли в числе mask единица на позиции
// pos (начиная с 0)
bool isOne(int mask, int pos) {
  return (mask & (1<<pos)) != 0;
}

// Устанавливает бит номер pos в значение
// value (0 или 1) в числе mask и возвращает
int setBit(int mask, int pos, int value){
  return mask | (value<<pos);
}

...
Рейтинг: 0 / 0
побитовый сдвиг
    #36094512
рпывапыа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
salom,

про установку в 0 чушь конечно, надо так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
// Устанавливает бит номер pos в значение
// value (0 или 1) в числе mask и возвращает
int setBit(int mask, int pos, int value){
  if (value == 1)
    return mask | (1<<pos);
  else
    return mask & (~(1<<pos));
}

...
Рейтинг: 0 / 0
побитовый сдвиг
    #36094549
aaaa33
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
рпывапыаsalom,

про установку в 0 чушь конечно, надо так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
// Устанавливает бит номер pos в значение
// value (0 или 1) в числе mask и возвращает
int setBit(int mask, int pos, int value){
  if (value == 1)
    return mask | (1<<pos);
  else
    return mask & (~(1<<pos));
}


Ну и как этот код в RowFilter использовать?
...
Рейтинг: 0 / 0
побитовый сдвиг
    #36094559
dsfgwsfdgdfg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aaaa33,

зачем код, который что-то модифицирует использовать в фильтре?

если надо в SQL то там есть побитовые операции...

Код: plaintext
1.
2.
string filter = "Status & " + (1<<Change) + " > 0";
((DataView)dt3.DefaultView).RowFilter = filter;

где Change это номер бита (от 0 до 31)
...
Рейтинг: 0 / 0
побитовый сдвиг
    #36094569
aaaa33
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dsfgwsfdgdfgaaaa33,

зачем код, который что-то модифицирует использовать в фильтре?

если надо в SQL то там есть побитовые операции...

Код: plaintext
1.
2.
string filter = "Status & " + (1<<Change) + " > 0";
((DataView)dt3.DefaultView).RowFilter = filter;

где Change это номер бита (от 0 до 31)

RowFilter НЕ ПОДДЕРЖИВАЕТ побитовые операции
...
Рейтинг: 0 / 0
побитовый сдвиг
    #36094796
salom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aaaa33,
а как этот код в RowFilter использовать??

Код: plaintext
1.
2.
3.
4.
// стоит ли в числе mask единица на позиции
// pos (начиная с 0)
bool isOne(int mask, int pos) {
  return (mask & (1<<pos)) != 0;
}
...
Рейтинг: 0 / 0
побитовый сдвиг
    #36094905
salom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
UgumsМожно использовать следующий фильтр:
Код: plaintext
1.
"Convert((columnName - columnName % n) / n, 'System.Int32') % 2 = 1"
где n - степень двойки

Спасибо, работает
...
Рейтинг: 0 / 0
побитовый сдвиг
    #36095055
salom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
salomUgumsМожно использовать следующий фильтр:
Код: plaintext
1.
"Convert((columnName - columnName % n) / n, 'System.Int32') % 2 = 1"
где n - степень двойки

Спасибо, работает

Только не работает если n - не степень двойки (6,5....)
Можно ли эти варианты предусмотреть??
...
Рейтинг: 0 / 0
побитовый сдвиг
    #36095160
Ugums
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
salomsalomUgumsМожно использовать следующий фильтр:
Код: plaintext
1.
"Convert((columnName - columnName % n) / n, 'System.Int32') % 2 = 1"
где n - степень двойки

Спасибо, работает

Только не работает если n - не степень двойки (6,5....)
Можно ли эти варианты предусмотреть??

Разлагаешь число на степени двойки, для каждой степени определяешь фильтр, соединяешь фильтры с помощью OR.
Например, для 5:
5 = 1 + 4
"Convert((columnName - columnName % 1) / 1, 'System.Int32') % 2 = 1 OR Convert((columnName - columnName % 4) / 4, 'System.Int32') % 2 = 1"

Коряво конечно.
...
Рейтинг: 0 / 0
побитовый сдвиг
    #36095289
salom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ugums,

Код: plaintext
Convert((Status - Status % 4) /  4, 'System.Int32') % 2 = 1

при Status=42 (101010) не срабатывает??

а если Status=16 (10000)
срабатывает и
Код: plaintext
1.
Convert((Status - Status % 3) /  3, 'System.Int32') % 2 = 1
Convert((Status - Status % 5) /  5, 'System.Int32') % 2 = 1
...
Рейтинг: 0 / 0
побитовый сдвиг
    #36095370
Ugums
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
salomUgums,

Код: plaintext
Convert((Status - Status % 4) /  4, 'System.Int32') % 2 = 1

при Status=42 (101010) не срабатывает??

4 это не разряд, а 2^(разряд - 1). Для 42 3 разряд равен 0 - 101 0 10

salomа если Status=16 (10000)
срабатывает и
Код: plaintext
1.
Convert((Status - Status % 3) /  3, 'System.Int32') % 2 = 1
Convert((Status - Status % 5) /  5, 'System.Int32') % 2 = 1


Код: plaintext
"Convert((columnName - columnName % n) / n, 'System.Int32') % 2 = 1"
Не работает, если n не степень двойки, чтобы работало:

Ugums
Разлагаешь число на степени двойки, для каждой степени определяешь фильтр, соединяешь фильтры с помощью OR.
Например, для 5:
5 = 1 + 4
"Convert((columnName - columnName % 1) / 1, 'System.Int32') % 2 = 1 OR Convert((columnName - columnName % 4) / 4, 'System.Int32') % 2 = 1"

Коряво конечно.
...
Рейтинг: 0 / 0
побитовый сдвиг
    #36098114
zebrox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gatmanесть в c# такие операторы
:
&, |, ^

а чем
...
Рейтинг: 0 / 0
побитовый сдвиг
    #36098122
zebrox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gatmanесть в c# такие операторы
:
&, |, ^

а чем этот вариант не устраивает?
& позволяет выставлять и читать 1 или 0 в нужном разряде
...
Рейтинг: 0 / 0
побитовый сдвиг
    #36098323
=Lucky=
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не понимаю в чем проблема.
Бирёте 1, сдвигаете на тот разряд, который нужно проверить - получаете число Check, после этого

Проверяемое значение&Chek==1 значит бит установлен.

т.е
Код: plaintext
1.
2.
3.
4.
5.
public bool CheckFilter(int bitNumber,int filter)
{
    int f=1<<BitNumber;
    return filter&f==1?true:false;
}
Естественно это самый примитивный пример.
...
Рейтинг: 0 / 0
побитовый сдвиг
    #36099213
aaaa333
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
zebroxGatmanесть в c# такие операторы
:
&, |, ^

а чем этот вариант не устраивает?
& позволяет выставлять и читать 1 или 0 в нужном разряде

Повторяю еще раз.
DataView.RowFilter НЕ ПОДДЕРЖИВАЕТ побитовые операции.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
побитовый сдвиг
    #38716763
HomeCoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И снова эти преждевременные оптимизации.

Непонятно, зачем вообще в языке высокого уровня эти извращения из низкоуровневого мира с экономией на спичках.

Ну просто достало уже...

Код: c#
1.
ScreenWidth >> 2



Пока не погуглил, что это "быстрое" деление на 2, не понял, на кой чёрт автору понадобилось сдвигать чего-то там. А это он просто хотел выпендриться получить половину длины экрана. Но не просто просто, а очень просто (как в рекламе фирмы Сэлдом) не так ScreenWidth / 2, а вот так... Чтоб никто не догадался.


[spoiler]
YouTube Video
...
Рейтинг: 0 / 0
побитовый сдвиг
    #38716764
HomeCoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не знаю побитовый сдвиг и горжусь этим!

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

А как у вас с этим дела обстоят?
...
Рейтинг: 0 / 0
побитовый сдвиг
    #38716766
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HomeCoderНе знаю побитовый сдвиг и горжусь этим!
...
А как у вас с этим дела обстоят?

Хорошо. Главное, чтобы в погоне за "чистым кодом"
Вы не начали использовать вот это:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
class Program
	{


		static void Main(string[] args)
		{
			Timer mainTimer;

			DataSet ds3 = new DataSet();
			DataTable dt3 = new DataTable();
			List<decimal> allListeners = new List<decimal>();
			mainTimer = new Timer();
			string sss = "3333";
			
			object middleOb = mainTimer;



			var IdoNotKnow = middleOb;
			CallMeSmart(IdoNotKnow);


		


			Console.ReadKey();
			

		}

		static void CallMeSmart(object whoAmI)
		{
			DynamicOver((dynamic)whoAmI);
		}
	

		private static void DynamicOver(Timer mainTimer)
		{
			Console.WriteLine("mainTimer");	
		}

		private static void DynamicOver(List<decimal> allListeners)
		{
			Console.WriteLine("allListeners");
		}

		private static void DynamicOver(DataTable dt3)
		{

			Console.WriteLine("dt3");			
		}

		private static void DynamicOver(DataSet ds3)
		{
			Console.WriteLine("ds3");			
		}



	}




:-)

А сдвиг итп - знать надо. Бывает, что пишутся интеграции с устройствами, которые не IBM.....
:-)
...
Рейтинг: 0 / 0
побитовый сдвиг
    #38716939
HomeCoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
D129А сдвиг итп - знать надо. Бывает, что пишутся интеграции с устройствами, которые не IBM.....
:-)
А где там побитовый сдвиг нужен?

Ну, вот в том же .NET есть классы для работы со всякими портами. А некоторыми железками надо управлять, посылая им всякие команды через эти порты в виде кодов. Где там побитовый сдвиг может быть нужен?
...
Рейтинг: 0 / 0
побитовый сдвиг
    #38716954
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HomeCoderD129А сдвиг итп - знать надо. Бывает, что пишутся интеграции с устройствами, которые не IBM.....
:-)
А где там побитовый сдвиг нужен?

Ну, вот в том же .NET есть классы для работы со всякими портами. А некоторыми железками надо управлять, посылая им всякие команды через эти порты в виде кодов. Где там побитовый сдвиг может быть нужен?

Например посчитать контрольную сумму команды. Или если устройство принимает битовую маску для установления своих выходов в состояния вкл/выкл
...
Рейтинг: 0 / 0
побитовый сдвиг
    #38716958
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HomeCoderНе знаю побитовый сдвиг и горжусь этим!
хороший тролль, годный
...
Рейтинг: 0 / 0
побитовый сдвиг
    #38716967
HomeCoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ИзопропилHomeCoderНе знаю побитовый сдвиг и горжусь этим!
хороший тролль, годный
Это было сказано в контексте применения побитового сдвига везде и всюду. По ссылке пройдите, что я на прошлой странице оставил - везде все деления на 2, на 3 и прочие подобные операции заменяются на всякие битовые операции - "чтобы было быстрее", ага. Это тот случай, когда знание побитового сдвига только вредит. Незнание, соответственно, не вредит.

Вообще, какая-то нездоровая тенденция в наше время пошла - программисты на языках высокого уровня кичатся, что знают некоторые низкоуровневые оптимизации, пихают их везде и всюду и гордятся этим. Это как раз тот случай, когда универские курсы по программированию во вред пошли. Самоучки, учившие только сам высокоуровневый язык и некоторые области рядом - для решения своих задачь, не имевшие кучу всяких ненужных курсов, типа "архитектура ЭВМ полувековой давности" и "пишем в машинных кодах", недоумевают, к чему тут эти побитовые выпендрёжи. Тогда уж надо было идти микроконтроллеры программировать и на ассемблере писать - это там битики руками двигают. А среди высокоуровневых паттернов ваши побитовые сдвиги как огниво на космическом корабле.
...
Рейтинг: 0 / 0
побитовый сдвиг
    #38716968
HomeCoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторНезнание, соответственно, не вредит приносит пользу.
...
Рейтинг: 0 / 0
побитовый сдвиг
    #38716970
HomeCoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторпрограммисты на языках высокого уровня кичатся, что знают некоторые низкоуровневые оптимизации, пихают их везде и всюду и гордятся этим. Это как раз тот случай, когда универские курсы по программированию во вред пошли. Самоучки, учившие только сам высокоуровневый язык и некоторые области рядом - для решения своих задачь, не имевшие кучу всяких ненужных курсов, типа "архитектура ЭВМ полувековой давности" и "пишем в машинных кодах", недоумевают, к чему тут эти побитовые выпендрёжи
Вот, кстати, похожая история недавно была. Пришёл такой студентик к старшему работу сдавать, а у студентика везде эти самые "оптимизации", сдвиги, маски-куяски и прочая хрень вместо обычного деления-умножения и набора параметров и перечислений - для какой-то ширпотребной программки типа "ещё один асечно-вконтактовый клиент". Старшой не понял, зачем эта хрень тут нужна. А студентик потом среди своих такой начинает пальцы гнуть "да этот типа тимлид нихрена даже азов не знает - это ж на первом курсе универа мы проходили!". Идиоты малолетние.
...
Рейтинг: 0 / 0
побитовый сдвиг
    #38716991
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HomeCoder,

1) Тема то 5-летней давности, был ли смысл поднимать?
2) Побитовые операции, как и любой инструмент, удобны в своей области применения. Например, установка флагов.

Да, имхо бессмысленно делить на 2 смещением битов, но это как раз таки пример неправильного применения инструмента.

Хотя... На Хабре читал про один из конкурсов про поиск простых чисел. Самым эффективным оказалось решение, где автор грамотно применял работу с битами.
...
Рейтинг: 0 / 0
побитовый сдвиг
    #38717026
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79Да, имхо бессмысленно делить на 2 смещением битов, но это как раз таки пример неправильного применения инструмента.
бессмысленность в том, что компилятор сам выбирает в этом случае нужную команду
...
Рейтинг: 0 / 0
побитовый сдвиг
    #38717101
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилHomeCoderНе знаю побитовый сдвиг и горжусь этим!
хороший тролль, годныйДа ну. Закомплексованный невежда он, а не тролль.
...
Рейтинг: 0 / 0
побитовый сдвиг
    #38717107
HomeCoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAИзопропилпропущено...

хороший тролль, годныйДа ну. Закомплексованный невежда он, а не тролль.
А ведь ты прав.
...
Рейтинг: 0 / 0
побитовый сдвиг
    #38717108
HomeCoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAИзопропилпропущено...

хороший тролль, годныйДа ну. Закомплексованный невежда он, а не тролль.
А о себе ты как думаешь?
...
Рейтинг: 0 / 0
побитовый сдвиг
    #38717109
sphinx_mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79HomeCoder,

1) Тема то 5-летней давности, был ли смысл поднимать?
2) Побитовые операции, как и любой инструмент, удобны в своей области применения. Например, установка флагов.На вскидку: посчет контрольных сумм... вычисление хэш-функций...
...
Рейтинг: 0 / 0
побитовый сдвиг
    #38717112
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HomeCoderskyANAпропущено...
Да ну. Закомплексованный невежда он, а не тролль.
А о себе ты как думаешь?Нормально я о себе думаю, чтобы не сглазить
...
Рейтинг: 0 / 0
побитовый сдвиг
    #38717170
HomeCoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAHomeCoderпропущено...

А о себе ты как думаешь?Нормально я о себе думаю, чтобы не сглазить
В приметы веришь?
...
Рейтинг: 0 / 0
побитовый сдвиг
    #38717171
HomeCoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAHomeCoderпропущено...

А о себе ты как думаешь?Нормально я о себе думаю, чтобы не сглазить
А что эта картинка слишком часто появляется?

http://www.sql.ru/forum/images/smoke.gif

Стеснительный ты человек.
...
Рейтинг: 0 / 0
побитовый сдвиг
    #38717407
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HomeCoderskyANAпропущено...
Нормально я о себе думаю, чтобы не сглазить
В приметы веришь?Конечно.
...
Рейтинг: 0 / 0
побитовый сдвиг
    #38717408
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HomeCoderskyANAпропущено...
Нормально я о себе думаю, чтобы не сглазить
А что эта картинка слишком часто появляется?

http://www.sql.ru/forum/images/smoke.gif

Стеснительный ты человек.А то
...
Рейтинг: 0 / 0
побитовый сдвиг
    #38717587
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
salomесть
byte a = 1;
нужно в нем закодировать разные значения:
если (условие1), тов первом разряде 1 , если (!условие1), то 0
если (условие2), тов во втором разряде 1 , если (!условие2), то 0
и т.д.
единица могут быть в нескольких разрядах одновременно
a <<= 1; - это если бы двигать одну и туже единицу, а как их выставлять в нужный разряд??

и как потом расшифровать разряды
enum + FlagsAttribute Вам в помощь и не нужно ни какаких сдвигов
...
Рейтинг: 0 / 0
43 сообщений из 43, показаны все 2 страниц
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / побитовый сдвиг
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]