Akhand Jyoti Ответов: 1

Я хочу выполнить побитовую операцию и(&) между двумя переменными.но у меня есть одно значение в double.but double не допускает побитовой операции.


Я хочу выполнить немного мудрую операцию между двумя числами: одно имеет тип double, а другое-тип int.И когда я выполняю код, получаю исключение, которое.Побитовая операция и не может быть выполнена между double и int.

Что я уже пробовал:

строка add64 = "0013A2004154EC8E";
двойной num_add64 =типа int64.Синтаксический анализ(add64, системы.Глобализация.Числовые стили.HexNumber);
int sumadd = (int)sum;
int r = sumadd & ck;

после типового литья .В переменной sumadd я получаю отрицательное значение.Вот в чем проблема.
Пожалуйста, помогите мне.Заранее спасибо.

Richard MacCutchan

Это не имеет смысла, какую проблему вы пытаетесь решить?

CodeWraith

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

В конце концов, похоже, что он просто хочет инициализировать переменную с литеральным 64-битным адресом, а затем замаскировать (угадать!) какую-то часть контрольной суммой.

Richard MacCutchan

Я знаю, поэтому и задал свой вопрос.

1 Ответов

Рейтинг:
6

Jochen Arndt

Почему вы назначаете Int64 К double?

Приведите второй операнд ck к Int64 вместо этого и выполните операцию:

Int64 num_add64 =Int64.Parse(add64, System.Globalization.NumberStyles.HexNumber);
int r = Convert.ToInt32(num_add64 & Convert.ToInt64(ck));

Потому что вы имеете дело с целыми числами разной ширины и выполняете AND операция, вы должны проверить, если используете uint возможно, это лучший выбор здесь (предполагая, что ck это uint):
UInt64 num_add64 =UInt64.Parse(add64, System.Globalization.NumberStyles.HexNumber);
uint r = Convert.ToUInt32(num_add64) & ck;


Akhand Jyoti

Поблагодарить у так много.Это работает.

Jochen Arndt

Добро пожаловать.

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