с точки зрения побитовых операций ... Может любой, пожалуйста, укажите это мне? Кроме того, , чтобы получить правильный знак (-1, 0 или 1) данного целого числа а я в настоящее время с помощью
(a > 0) ? 1 : (a >> 32);
Армен Tsirunyan и Джон Скит ответил на ваш технический вопрос, я собираюсь попытайтесь объяснить некоторые технические неправильные представления, которые, как вам кажется, есть.
Первая ошибка заключается в том, что если у вас есть 32-битное целое число со знаком и вы пытаетесь сдвинуть его на 32, вы попытаетесь посмотреть на 33-й бит, который в случае подписанной базовой 2-артемии будет битом переполнения ,
Вторая ошибка заключается в том, что у вас есть 32-разрядное двоичное двоичное значение. Последний бит будет либо одним, либо ноль. Существует только одно нулевое значение. Таким образом, ваше заявление о попытке выяснить, является ли знак (-1,0,1), явно указывает на то, что вы не понимаете этого факта. Если подписанный бит равен 1, число будет отрицательным, если оно равно нулю, оно будет положительным.Структуры, которые обрабатывают число по большей части в .NET Framework, не знают о дополнении 2 и дополнении 1. Это, конечно, не означает, что вы не можете расширить эту функциональность или просто преобразовать целое число со знаком в число дополнений 2 (действительно просто честно).
Я должен добавить, что есть только одно значение для нуля, когда у вас есть целое число со знаком. Я думаю, это была моя главная проблема с вашим заявлением «проверить знак», которое вы сделали, что показывает неправильное представление о двоичных числах.
http://en.wikipedia.org/wiki/Signed_magnitude#Sign-and-magnitude
Вы должны перейти на 31, а не 32. Если вы считаете, что измерить его, чтобы быть быстрее, чем Math.Sign(), а затем поменять местами испытания. –