Здравствуйте, HLGEN, Вы писали:
HLG>У меня вопрос — я сделал xor двух байтов. В результате получился int. HLG>Почему так получилось?
HLG>Нет, я знаю как это решить с помощью unchecked и &0xFF
а сохранял результат наверно в инт?
Здравствуйте, LiS_at_RSDN, Вы писали:
LS_>Здравствуйте, HLGEN, Вы писали:
HLG>>У меня вопрос — я сделал xor двух байтов. В результате получился int. HLG>>Почему так получилось?
HLG>>Нет, я знаю как это решить с помощью unchecked и &0xFF LS_>а сохранял результат наверно в инт?
byte a = GetA();
byte b = GetB();
byte c = a ^ b;
В результате пишет, что отсутсвует превидение int в byte
HLG>byte a = GetA(); HLG>byte b = GetB(); HLG>byte c = a ^ b;
HLG>В результате пишет, что отсутсвует превидение int в byte
public class test
{
static byte a = 0xF8;
static byte b = 0x3F;
static byte c = (byte)(a ^ b);
public static void Main()
{
Console.WriteLine("0x{0:x2}", c);
Console.ReadKey();
}
}
Здравствуйте, HLGEN, Вы писали:
HLG>У меня вопрос — я сделал xor двух байтов. В результате получился int. HLG>Почему так получилось?
HLG>Нет, я знаю как это решить с помощью unchecked и &0xFF
эх... был бы я мудрейшим...
странно все в этом .нет. все не так, как я привык.
а разбираться с .нет все же придется.
например: сабж. какие мухи кусали разработчиков, к чему это,
что ксор 2х байтов — инт? и в дизасме ниче толкового не увидишь...
Здравствуйте, LiS_at_RSDN, Вы писали:
LS_>Здравствуйте, HLGEN, Вы писали:
HLG>>У меня вопрос — я сделал xor двух байтов. В результате получился int. HLG>>Почему так получилось?
HLG>>Нет, я знаю как это решить с помощью unchecked и &0xFF LS_>эх... был бы я мудрейшим... LS_>странно все в этом .нет. все не так, как я привык. LS_>а разбираться с .нет все же придется. LS_>например: сабж. какие мухи кусали разработчиков, к чему это, LS_>что ксор 2х байтов — инт? и в дизасме ниче толкового не увидишь...
да ничего вы не понимаете =)))) просто у разработчиков трава особая была когда они все это придумывали
class Test
{
const byte x = 0xF8;
const byte y = 0x3F;
static byte r = x ^ y;
static void Main()
{
Console.WriteLine("0x{0:x2}", r);
Console.ReadKey();
}
}
работает,а если x и y не обьявлять как const то неработает
Здравствуйте, HLGEN, Вы писали:
HLG>У меня вопрос — я сделал xor двух байтов. В результате получился int. HLG>Почему так получилось?
Все очень просто. Стандарт C# определяет только такие predefined operator XOR:
int operator ^(int x, int y);
uint operator ^(uint x, uint y);
long operator ^(long x, long y);
ulong operator ^(ulong x, ulong y);
void operator ^(long x, ulong y);
void operator ^(ulong x, long y);
По правилам резолва операторов выбирается с сигнатурой int (int, int).
Ну а с const'ом все еще проще — оператор считается в compile-time, компилятор видит что результат укладывается в byte, и соответственно его туда кладет без шума и пыли
С уважением, Евгений
JetBrains, Inc. "Develop with pleasure!"
Здравствуйте, codenet, Вы писали:
C>Здравствуйте, LiS_at_RSDN, Вы писали:
LS_>> byte c = (byte)(a ^ b); LS_>>00000024 movzx eax,byte ptr ds:[00958A7Ch] LS_>>0000002b movzx edx,byte ptr ds:[00958A80h] LS_>>00000032 xor eax,edx LS_>>00000034 mov ebx,eax LS_>>лол...
C>ну обьясните мудрейший в чем тут лол тоже посмеятся хочу ,а то настроения нету
Ну вобщем так:
операнды a и b кладутся в 32-х разрядные регистры с расширением старших бит нулем, а потом над регистрами производится XOR. Но что смешного — тоже неясно.
Здравствуйте, _d_m_, Вы писали:
___>Ну вобщем так: ___>операнды a и b кладутся в 32-х разрядные регистры с расширением старших бит нулем, а потом над регистрами производится XOR. Но что смешного — тоже неясно.
Каждый слот стека вычислений может содержать ровно одно значение одного из следующих типов:
int64 — 8-байтовое целое со знаком;
int32 — 4-байтовое целое со знаком;
native int — знаковое целое, разрядность которого зависит от аппаратной платформы (может быть 4 или 8 байт);
F — число с плавающей точкой, разрядность которого зависит от аппаратной платформы (не может быть меньше 8 байт);
& — управляемый указатель;
O — объектная ссылка;
Пользовательский тип-значение.
...
Также мы можем видеть, что допустимые типы значений для стека вычислений не совпадают с общей системой типов CTS. Например, в CTS существуют целые типы разрядности 1 и 2 байта, которые не могут содержаться на стеке вычислений. И наоборот, тип F стека вычислений не имеет аналога в CTS. Кроме того, для стека вычислений все управляемые указатели и объектные ссылки отображаются в два типа: & и O соответственно.
Давайте обсудим, как в VES осуществляется работа с типами данных, не поддерживаемыми напрямую стеком вычислений.
Во-первых, короткие целые типы (bool, char, int8, int16, unsigned int8, unsigned int16) при загрузке на стек вычислений расширяются до int32. При этом знаковые короткие целые типы (int8, int16) расширяются с сохранением знака, а беззнаковые расширяются путем добавления нулевых битов. При сохранении значения со стека вычислений в переменной, параметре, поле объекта или элементе массива происходит обратное сужающее преобразование.
Ну вобщем так:
операнды a и b кладутся в 32-х разрядные регистры с расширением старших бит нулем, а потом над регистрами производится XOR. Но что смешного — тоже неясно.
видимо смешно то, что для байтовых операций используются четырех байтовые регистры.
а у меня другой подобный вопрос который мучает меня уже долго:
Здравствуйте, Nimnul, Вы писали:
N>кто виноват в том что она не определена? %)
Вопрос скорее не в том "кто виноват", а "что делать"
Re[8]: Проблема с XOR
От:
Аноним
Дата:
23.11.06 00:43
Оценка:
вопрос как раз в том что разработчики фв не определили операции деления для типов отличных от int, кстате сказать другие операции они тоже забыли определить. я уже не говорю, что в шарпе нет математических операторов типа cos, sin и т.д.
Здравствуйте, Nimnul, Вы писали:
N>вопрос как раз в том что разработчики фв не определили операции деления для типов отличных от int, кстате сказать другие операции они тоже забыли определить.
Я думаю, слово "забыли" здесь неуместно. IL продуман очень хорошо. N> я уже не говорю, что в шарпе нет математических операторов типа cos, sin и т.д. А что, они должны быть?
Ну ладно, вот так спросим: в каком языке программирования общего назначения такие операторы есть?
1.2.0 alpha rev. 655
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Nimnul, Вы писали:
N>вопрос как раз в том что разработчики фв не определили операции деления для типов отличных от int, кстате сказать другие операции они тоже забыли определить. я уже не говорю, что в шарпе нет математических операторов типа cos, sin и т.д.
Зачем тебе операторы когда cos и sin реализованы в классе Math через методы?