2009-12-30 1 views
0

Недавно я начал создавать контейнер товаров и каждый раз, когда пользователь пытается добавить элемент в контейнер. Если каким-то образом тот же тип элемента существует, то он будет складывать их друг на друга, но есть предел, который int.MaxValue и если я пробовал:.NET/C# - Разрешить переполнение целых чисел

if (2147483647 + 2147483647 > int.MaxValue) 

Это дало бы мне следующую ошибку:

The operation overflows at compile time in checked mode 

так я пытался использовать непроверенную ключевое слово, как так:

unchecked 
{ 
    if (2147483647 + 2147483647 > int.MaxValue) 
    { 
    } 
} 

, но это не показывает триггер, если заявление на всех (я предполагаю, что это обернуто вокруг логического оператора?)

Есть ли другие способы сделать это? (без использования чего-то вроде int64 и т. д.)

+0

Почему вы добавляете две константы, которые равны int.MaxValue и сравнивают их с int.MaxValue? –

+0

@GregS, это просто пример. – TheAJ

+0

Каков точный вопрос, конечно, два int.MaxValues ​​больше, чем int.MaxValue. – GrayWizardx

ответ

2

Если операция int переполняет его, не будет тестироваться больше Int32.MaxValue.

Если вы хотите, чтобы это условие было истинным, используйте длинные.

if (2147483647L + 2147483647L > int.MaxValue) ... 

В качестве альтернативы используйте uint s.

if (2147483647U + 2147483647U > (uint)int.MaxValue) ... 
+0

или вы могли бы отметить, что, без сомнения, компилятор будет считать, что условие всегда верно. –

1

Попробуйте использовать оба значения uint (без знака), если вам не нужна отрицательная половина битового пространства. Такая же ширина бит, как раз, не откатывается отрицательно после Int.MaxValue (например, это 2x величина int.MaxValue)

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

  • Нет связанных вопросов^_^