долго долгая реализация в машине на 32 бита

equals () наследуется от Object, а унаследованные общедоступные методы не учитываются, когда вы определяете, является ли интерфейс функциональным интерфейсом. Так что даже если equals () является абстрактным в компараторе, потому что он унаследован, он не учитывается.

ПРАВИЛО: Функциональный интерфейс - это интерфейс, который имеет один абстрактный метод. Методы по умолчанию не учитываются; Статические методы не учитываются; и , унаследованные от Object , не учитываются.

17
задан tshepang 10 September 2012 в 12:25
поделиться

5 ответов

На архитектуре IA32 64-разрядное целое число реализовано в использовании двух 32-разрядных регистров (eax и edx).

существует платформа определенные эквиваленты для C++, и можно использовать stdint.h заголовок, где доступный (повышение предоставляет Вам одно ).

9
ответ дан 30 November 2019 в 12:27
поделиться

Эквивалент в C++ долго длинен также. Это не требуется стандартом, но большинство компиляторов поддерживает его, потому что это настолько полезно.

, Как это реализовано? Большинство архитектур ЭВМ уже имеет встроенную поддержку дополнений многословных и вычитаний. Они не делают 64 битов addititions непосредственно, но используют флаг переноса, и специальная добавлять-инструкция создать 64 бита добавляют от двух 32 битов, добавляет.

то же расширение существует для вычитания также (перенос называют, одалживают в этих случаях).

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

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

14
ответ дан 30 November 2019 в 12:27
поделиться

Как все заявили, 64-разрядное целое число обычно реализуется путем простого использования двух 32-разрядных целых чисел вместе. Тогда умная генерация кода используется для отслеживания эти , несут и/или одалживают биты, чтобы отслеживать переполнение и корректироваться соответственно.

Это, конечно, делает такую арифметику более дорогостоящей с точки зрения пространства кода и время выполнения, чем тот же код скомпилированный для архитектуры с собственной поддержкой 64-разрядных операций.

4
ответ дан 30 November 2019 в 12:27
поделиться

Если Вы заботитесь о диаметрах долота, необходимо использовать

#include <stdint.h>

int32_t n;

и друзья. Это работает на C++ также.

64-разрядные числа на 32-разрядных машинах реализованы, как Вы думаете 4 дополнительными байтами. Вы могли поэтому реализовать свой собственный 64-разрядный тип данных путем выполнения чего-то вроде этого:

struct my_64bit_integer {
    uint32_t low;
    uint32_t high;
};

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

существует int64_t в stdint.h, который идет с моей версией GCC, и в Microsoft Visual C++ Вы имеете __ int64 тип также.

2
ответ дан 30 November 2019 в 12:27
поделиться

Следующий стандарт C++ (должный 2009, или возможно 2010), намечен для включения "длинного длинного" типа. Как отмечалось ранее, это уже широко используется.

реализация до разработчиков компилятора, хотя компьютеры всегда поддерживали операции многократно увеличенной точности. Некоторые языки, как Python и язык Common LISP, требуют поддержки целых чисел неопределенной точности. Давно, я записал 64-разрядные стандартные программы умножения и разделения для компьютера (Z80), который мог справиться с 16-разрядным дополнением и вычитанием без аппаратного умножения вообще.

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

2
ответ дан 30 November 2019 в 12:27
поделиться