c загадка (если оператор) [закрытый]

6
задан Daniel Vassallo 5 February 2010 в 12:46
поделиться

3 ответа

Фабрика - это тип шаблона конструкции. В основном фабрика возвращает класс, зависящий от потребностей вызывающего класса. Все классы, возвращаемые фабрикой, должны совместно использовать один и тот же интерфейс, чтобы можно было вызывать одни и те же открытые методы (хотя способ реализации метода каждым классом может быть разным).

Вот хорошая ссылка 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.

7
ответ дан 8 December 2019 в 12:20
поделиться

Я не знаю, какой размер int в моей машине. Поэтому я использовал программу, чтобы найти максимальное значение int like

void main()
{
   int i;
   do{
       }while(i>i++);
   printf ("data=%d",i);
}

Я нашел максимальное значение i = -2147483648

присвоить его данным, это сработает...

0
ответ дан 8 December 2019 в 12:20
поделиться

Это должно быть минимальное значение целого числа, то есть 0x80000000, если оно 32-битное, потому что это единственное число, кроме нуля, которое остается неизменным при отрицании.

#include <stdio.h>

main()
{
 int data = 0x80000000;
 if(data!=0 && data==-data)
 {
  printf("AMAZING");
 }
}

Результат:

AMAZING

Как правильно указал Ричард Пеннингтон, это работает из-за представления отрицательных чисел с дополнением до двух . Наибольшее представимое положительное число на единицу меньше по абсолютной величине, чем наибольшее отрицательное число, поэтому, если вы попытаетесь отрицать наибольшее отрицательное число, оно переполняет int и оборачивается, возвращая то же число.

Для компьютеров, которые используют дополнение до единицы , отрицательное значение каждого представимого числа также может быть представлено без переполнения, поэтому у этой головоломки нет решения.

12
ответ дан 8 December 2019 в 12:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: