Дополнение 2 работает следующим образом:
Байт состоит из 8 бит.
00000000 означает 0
11111111 означает 255
blockquote>Однако, если числа были представлены так, мы не могли бы различать, является ли число положительным или отрицательным. По этой причине бит с левой стороны дает нам эту информацию. Если бит с левой стороны
0
, вы можете начать добавлять значение других бит в верхней частиzero
. Если бит1
, вы должны начать добавлять вверху-128
. Поскольку бит на левой стороне равен двум параметрам в семь.Примеры;
В этих примерах бит с левой стороны равен 1, это означает, что мы добавляем значения других бит в верхней части -128.
10000000 = -128 (-128 + 0)
10000001 = -127 (-128 + 1)
10000011 = -125 (-128 + 3)
10000111 = -121 (-128 + 7)
blockquote>Одинаковые байты, но на этот раз бит слева -
0
. Это означает, что мы начинаем добавлять вверху0
.00000000 = 0 (0 + 0)
00000001 = 1 (0 + 1)
00000011 = 3 (0 + 3)
00000111 = 7 (0 + 7)
blockquote>Если мы до сих пор в порядке, ответ на ваш вопрос, наименьшее возможное число с 8 бит с этим правилом:
10000000 = -128
blockquote>наибольшее возможное число
011111111 = 127
blockquote>Вот почему диапазон находится между -128 и 127.
Да, вы можете перейти к следующему блоку case двумя способами. Вы можете использовать пустые регистры, для которых не нужен перерыв, или использовать goto
, чтобы перейти к следующему (или любому) регистру:
switch (n) {
case 1:
case 2:
case 3:
Console.WriteLine("1, 2 or 3");
goto case 4;
case 4:
Console.WriteLine(4);
break;
}
C # не поддерживает неявную конструкцию провала, но break
(или goto
), тем не менее, должен быть там ( msdn ). Единственное, что вы можете сделать, - это складывать кейсы следующим образом:
switch(something) {
case 1:
case 2:
//do something
break;
case 3:
//do something else
}
, но этот break
(или другой оператор перехода, например goto
) просто должен быть там.
Принуждение к остановке используется для остановки ошибок. Если вам нужно принудительно выполнить провал, используйте «goto case» (замените соответствующее значение)
следующий пример показывает, что вы можете сделать:
switch(n)
{
case 1:
case 2:
//do something for 1+2
//...
goto case 3;
case 3:
//do something for 3, and also extra for 1+2
//...
break;
default:
//do something for all other values
//...
break;
}
См. http://msdn.microsoft.com /en-us/library/06tc147t%28VS.80%29.aspx[1243 visible