Чтобы избежать всех отрицательных эффектов инициализации двойной комбинации, например:
делать следующие вещи:
Пример:
public class MyClass {
public static class Builder {
public int first = -1 ;
public double second = Double.NaN;
public String third = null ;
public MyClass create() {
return new MyClass(first, second, third);
}
}
protected final int first ;
protected final double second;
protected final String third ;
protected MyClass(
int first ,
double second,
String third
) {
this.first = first ;
this.second= second;
this.third = third ;
}
public int first () { return first ; }
public double second() { return second; }
public String third () { return third ; }
}
Использование :
MyClass my = new MyClass.Builder(){{ first = 1; third = "3"; }}.create();
Преимущества:
Недостатки:
И, как результат, у нас самый простой шаблон java-строителя.
См. все образцы в github: java-sf-builder-simple-example
Это все сводится к знанию Ваших корней.
Да, это - технически старая техника, и я, вероятно, сделал бы то, что других людей, предложенных в том вопросе и, используют по модулю (%) оператор для определения нечетный или ровный. Но понимая то, что 1 дополнение с (или 2 дополнения с) всегда являются хорошей вещью знать. Используете ли Вы когда-нибудь их, Ваш ЦП имеет дело с теми вещами все время. Таким образом, никогда не может повреждать понимать понятие. Теперь, современные системы делают его так, Вы обычно никогда не должны волноваться о подобных вещах, таким образом, это стало темой для курсов Программирования 101 в некотором роде. Но необходимо помнить, что некоторые люди на самом деле все еще использовали бы это в "реальном мире"..., например, вопреки широко распространенному мнению существуют люди кто все еще блок использования! Не многие, но пока центральные процессоры не могут понять необработанный C# и Java, кто-то собирается все еще должным быть понять этот материал.
И heck, Вы никогда не знаете, когда Вы могли бы найти Ваш сам выполнение чего-то, где на самом деле необходимо выполнить двоичную математику и что 1 дополнение с могло пригодиться.
Я работаю в области телеметрии, и у некоторых из наших клиентов есть старые аналого-цифровые преобразователи, которые до сих пор используют дополнение 1. Мне просто нужно было написать код на днях, чтобы преобразовать дополнение 1 в дополнение 2, чтобы компенсировать это.
Так что да, это все еще там (но вы не будете сталкиваться с этим очень часто).
CDC Кибер 18, которые я использовал назад в '80, были 1 машиной дополнения с, но это почти 30 лет назад, и я не видел ту с тех пор (однако, который был также прошлым разом, когда я работал над некомпьютерным)
Я никогда не встречался с системой поразрядного дополнения до единицы, и я кодировал, пока Вы имеете.
, Но я действительно встречался 9's дополнительная система - машинный язык калькулятора HP-41c. Я признаю, что это можно считать устаревшим, и я не думаю, что у них когда-либо был компилятор C для тех.
Мы вышли из наших прошлых 1960-х Honeyboxen когда-то в прошлом году, который сделал его нашей самой старой машиной на сайте. Это было дополнение two. Это не должно говорить, что знание или быть знающим о поразрядном дополнении до единицы являются плохой вещью. Просто, Вы никогда не будете, вероятно, сталкиваться с проблемами поразрядного дополнения до единицы сегодня, неважно, сколько компьютерной археологии они сделали, чтобы Вы сделали на работе.
проблемы, с которыми Вы, более вероятно, столкнетесь на целочисленной стороне, порядок байтов проблемы (я смотрю на Вас PDP). Кроме того, Вы столкнетесь с большим "реальным миром" (т.е. сегодня) проблемы с плавание точка форматы , чем Вы будете целочисленные форматы.
Я решил найти один. Системы Unisys ClearPath имеют компилятор ANSI C (да, они называют его «Американским национальным стандартом C», для которого даже документация в формате PDF последний раз обновлялась в 2013 году. Документация доступна онлайн ;
Там все подписанные типы используют представление дополнения со следующими свойствами:
Type | Bits | Range
---------------------+------+-----------------
signed char | 9 | -2⁸+1 ... 2⁸-1
signed short | 18 | -2¹⁷+1 ... 2¹⁷-1
signed int | 36 | -2³⁵+1 ... 2³⁵-1
signed long int | 36 | -2³⁵+1 ... 2³⁵-1
signed long long int | 72 | -2⁷¹+1 ... 2⁷¹-1
Примечательно, что он также по умолчанию поддерживает несоответствующие unsigned int
и unsigned long
, которые диапазон от 0 ... 2³⁶ - 2
, но может быть изменен на 0 ... 2³⁶ - 1
с прагмой.
RFC 791 p.14 определяет контрольную сумму заголовка IP следующим образом:
Поле контрольной суммы является 16-битным дополнением к 16-битной сумме всех 16-битных слов в заголовке. Для целей вычисления контрольной суммы значение поля контрольной суммы равно нулю.
Таким образом, в реальном мире в каждом посылаемом IP-пакете все еще используется тяжело. :)