Я преобразовывал некоторый код Java в С# и столкнулся с небольшим рассолом. Вся документация в MSDN предполагает, что все побитовые операции возвращают тип, над которым они работают. См.: http://msdn.microsoft.com/en-us/library/aa691307(v=vs.71).aspx и http://msdn.microsoft.com/en-us/library/aa691377(v=vs.71).aspx, но что бы я ни делал, мой intellisense продолжает говорить мне, что вы «Не можете неявно преобразовать тип« long »в« int »». Следующая строка связана с проблемой, и для меня все литералы в ней выглядят так, как будто они оцениваются как int, а все управляемые типы являются либо int, либо uint. Что мне не хватает? Я даже не объявляю никаких длинных переменных в своем файле, и все переменные ниже имеют тип int. Приведение к uint должно сохранить беззнаковый оператор битового сдвига java (>>>)
int t1 = ((s13 << 96 - 66) | ((uint)s12 >> 66 - 64)) ^ ((s13 << 96 - 93) | ((uint)s12 >> 93 - 64));