Интервал на 32 бита * интервал на 32 бита = интервал на 64 бита?

Я предполагаю, что код, который вы показываете, находится внутри метода render() некоторого компонента React, так что у вас действительно есть состояние.

Обратите внимание, что атрибут component в теге Route ожидает значение, которое является функцией без аргументов. Компонент для визуализации является результатом функции . Но ничто не запрещает вам сделать какую-то работу до возврата значения. Я бы попробовал что-то вроде этого

<Route path={'/page1'} component={() => {
    this.setState({headerTitle: ...what you want..., boldTitle: ...what you want...})
    return <Page1 />
}}/>

. Если Page1 - это просто функция, измените строку «return» с помощью return Page1()

.

6
задан Jonathan Leffler 19 April 2009 в 11:08
поделиться

5 ответов

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

(Если только int64 не является собственным типом int для вашей конкретной системы, что кажется маловероятным)

17
ответ дан 8 December 2019 в 03:54
поделиться

Основной ответ: нет, он не будет делать то, что вы хотите.
Но он делает то, что ожидается.

Об математических операциях следует отметить две вещи:

  • Оба операнда будут одного типа.
  • Тип результата будет таким же, как и у ввода.

Если компилятор заметит несоответствие между операндами, он будет преобразовать один из операндов так, чтобы оба соответствовали (см. Какие переменные я должен типизировать при выполнении математических операций в C / C ++? ). Примечание. Это делается независимо от того, что происходит с результатом.

3
ответ дан 8 December 2019 в 03:54
поделиться

Это зависит от того, что такое int32 и int64.

Короче, все целые числа повышаются до, по крайней мере, 'int 'size (который может составлять 64 бита) перед любыми арифметическими операциями и размером большего операнда для бинарных операторов, если он имеет более высокий ранг, чем int.

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

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

Учитывая два числа a, b, и каждое число использует биты len_a и len_b.

Ваш тип выходных данных нуждается как минимум в : len_a и len_b бит.

В приведенном выше коде у вас есть два 31-битных числа (потому что INT_MAX - 1 = 0x7FFFFFFE использует 31 бит), и вам нужно будет типизировать один из них в int64_t, потому что он будет делать 32-битное умножение и переполнение перед преобразованием в int64_t.


Число битов, необходимых для умножения с фиксированной запятой:

len_output = howManyBits( a * b )
           = len_a + len_b

Быстрый пример для демонстрации вышеуказанного правила в действии:

a     = 7
len_a = 3

b     = 7
len_b = 3

c = a * b
  = 49 ( decimal )
  = 0x31 ( hex )

len_c = howManyBits( 0x31 ) 
      = 6

Вы можете написать функцию для подсчета битов. Или, если вы просто хотите быстро проверить работоспособность, чтобы подтвердить это, используйте что-то вроде Windows Calc, которое преобразует число в двоичную форму и подсчитывает используемые биты.

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

См .: 14. Смешанное использование простых целочисленных типов и memsize-типов. http://www.viva64.com/art-1-2-599168895.html

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

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