2010-11-07 6 views
1

В VB.NET следующий код вызывает переполнение.Поведение Mimic C - добавление целых чисел без знака

Dim t As UInt64 
    t = UInt64.MaxValue 
    t += 2UL 

Это мое понимание, что в C оно «обертывается». Предполагая, что это правда, есть ли способ имитировать это в Visual Basic? Мне нужно это для реализации UInt128, которую я пытаюсь написать.

ответ

4

Я не знаю, VB специально (так что вы должны преобразовать его самостоятельно), но обычный способ сделать это:

def add (value,addval): 
    if value <= maxvalue - addval: 
     return value + addval 
    subval = maxvalue - addval + 1 
    return value - subval 

Это в основном выяснит заранее, будет ли переполнение и превращает операцию add(N) в sub(maxvalue-N+1).

Оба испытания и добавление/подставка являются безопасными в пределах диапазона 0..maxvalue.

+0

Спасибо !!!! Теперь, когда я это вижу, он выглядит знакомым. – dbasnett

1

C# имеет ключевое слово unchecked, которое позволяет определенной области подавлять проверку переполнения. В VB.NET есть project wide setting. Отъезд this thread.

Настройка проекта применяется ко всей сборке. Если это неприемлемо в вашем контексте, вам нужно либо создать отдельную сборку для неконтролируемой функциональности, либо использовать такой подход, как @ paxdiablo.

+0

Я не хотел отключать их для всего проекта, но спасибо за напоминание. Я внедрил предложение @ paxdiablo. – dbasnett

Смежные вопросы