Фабрика - это тип шаблона конструкции. В основном фабрика возвращает класс, зависящий от потребностей вызывающего класса. Все классы, возвращаемые фабрикой, должны совместно использовать один и тот же интерфейс, чтобы можно было вызывать одни и те же открытые методы (хотя способ реализации метода каждым классом может быть разным).
Вот хорошая ссылка http://en.wikipedia.org/wiki/Factory_method_pattern
-121--1906153-Это должно быть минимальное значение целого числа, то есть 0x80000000, если оно 32-разрядное, потому что это единственное число кроме нуля, которое остается таким же, как при отрицании.
#include <stdio.h>
main()
{
int data = 0x80000000;
if(data!=0 && data==-data)
{
printf("AMAZING");
}
}
Результат:
AMAZING
Как правильно указал Ричард Пеннингтон, это работает из-за комплементарного представления отрицательных чисел. Наибольшее представляемое положительное число на единицу меньше по абсолютному значению, чем наибольшее отрицательное число, поэтому если попытаться свести на нет наибольшее отрицательное число, оно переполняет int и оборачивается, возвращая то же самое число.
Для компьютеров, использующих одно дополнение , отрицательное значение каждого представляемого числа также может быть представлено без переполнения, поэтому эта головоломка не имеет решения.
-121--4144533-Это зависит от размера целого числа и способа реализации целых чисел, но на машине с двумя дополнениями с 2-байтовыми целыми числами ответ -32768.
Я не знаю, какой размер int в моей машине. Поэтому я использовал программу, чтобы найти максимальное значение int like
void main()
{
int i;
do{
}while(i>i++);
printf ("data=%d",i);
}
Я нашел максимальное значение i = -2147483648
присвоить его данным, это сработает...
Это должно быть минимальное значение целого числа, то есть 0x80000000, если оно 32-битное, потому что это единственное число, кроме нуля, которое остается неизменным при отрицании.
#include <stdio.h>
main()
{
int data = 0x80000000;
if(data!=0 && data==-data)
{
printf("AMAZING");
}
}
Результат:
AMAZING
Как правильно указал Ричард Пеннингтон, это работает из-за представления отрицательных чисел с дополнением до двух . Наибольшее представимое положительное число на единицу меньше по абсолютной величине, чем наибольшее отрицательное число, поэтому, если вы попытаетесь отрицать наибольшее отрицательное число, оно переполняет int и оборачивается, возвращая то же число.
Для компьютеров, которые используют дополнение до единицы , отрицательное значение каждого представимого числа также может быть представлено без переполнения, поэтому у этой головоломки нет решения.