Тег Execute (Java Script) из innerHTML
Замените ваш скриптовый элемент div, имеющим класс class class = "javascript", и закройте его с помощью
Не выполняйте измените контент, который вы хотите выполнить (ранее он был в теге скрипта, и теперь он находится в теге div)
Добавьте стиль на свою страницу ...
Теперь запустите eval с помощью jquery (JQuery js должен быть уже включен)
$('.javascript').each(function() {
eval($(this).text());
});`
В моем блоге вы можете узнать больше здесь .
В C ++ операторы (для типов POD) всегда действуют на объекты того же типа. Таким образом, если они не совпадают, то они будут повышаться в соответствии с другими. Тип результата операции совпадает с типом операндов (после преобразования).
If either is long double the other is promoted to long double
If either is double the other is promoted to double
If either is float the other is promoted to float
If either is long long unsigned int the other is promoted to long long unsigned int
If either is long long int the other is promoted to long long int
If either is long unsigned int the other is promoted to long unsigned int
If either is long int the other is promoted to long int
If either is unsigned int the other is promoted to unsigned int
If either is int the other is promoted to int
Both operands are promoted to int
Примечание. Минимальный размер операций - int
. Таким образом, short
/ char
продвигаются до int
до выполнения операции.
Во всех ваших выражениях int
до выполнения float
до выполнения операции. Результатом операции является float
.
int + float => float + float = float
int * float => float * float = float
float * int => float * float = float
int / float => float / float = float
float / int => float / float = float
int / int = int
int ^ float => <compiler error>
Тип выражения, когда обе части одного типа одного типа, будет преобразован в наибольший для обоих. Проблема заключается в том, чтобы понять, какой из них больше, чем другой (он не имеет ничего общего с размером в байтах).
В выражениях, в которых задействовано действительное число и целое число, целое число будет повышаться до реального числа. Например, в int + float тип выражения является float.
Другое отличие связано с возможностью типа. Например, выражение, включающее int и long int, будет иметь тип long int.
long
является "большим" чем a float
, но каков тип long
+ float
?
– CB Bailey
6 April 2011 в 08:52
Целая глава 4 рассказывает о конверсиях, но я думаю, вас в основном интересуют следующие:
4.5 Интегральные рекламные акции [conv.prom] rvalue типа char, подписанный char, unsigned char, short int , или unsigned short int может быть преобразован в rvalue типа int, если int может представлять все значения типа источника; В противном случае исходное значение rvalue может быть преобразовано в rvalue типа unsigned int. Rvalue типа wchar_t (3.9.1) или тип перечисления (7.2) может быть преобразован в rvalue первого из следующих типов, который может представлять все значения его базового типа: int, unsigned int, long или unsigned длинный. Rvalue для целочисленного битового поля (9.6) можно преобразовать в r значение типа int, если int может представлять все значения битового поля; в противном случае его можно преобразовать в unsigned int, если unsigned int может отображать все значения битового поля. Если бит-поле еще больше, к нему не применяется целая реклама. Если бит-поле имеет нумерованный тип, оно рассматривается как любое другое значение этого типа для целей продвижения по службе. Rvalue типа bool может быть преобразовано в rvalue типа int, при этом false становится равным нулю, а true становится единым. Эти преобразования называются интегральными акциями.
4.6 Продвижение по плавающей запятой [conv.fpprom] rvalue типа float может быть преобразовано в rvalue типа double. Значение не изменяется. Это преобразование называется продвижением с плавающей запятой.
Поэтому все преобразования, включающие float, - результат float.
Только тот, который включает оба int - результат: int: int / int = int
Этот ответ во многом посвящен комментарию, сделанному @ RafałDowgird:
«Минимальный размер операций - это int». - Это было бы очень странно (что относительно архитектур, которые эффективно поддерживают char / короткие операции?) Действительно ли это в спецификации C ++?
blockquote>Имейте в виду, что стандарт C ++ имеет важное значение правило «как-если». См. Раздел 1.8: Исполнение программы:
3) Это положение иногда называют правилом «как есть», поскольку реализация может игнорировать любое требование Стандарта, пока результат как если бы это требование выполнялось, насколько это можно определить из наблюдаемого поведения программы.
blockquote>Компилятор не может установить
int
размером 8 бит, даже если он был самым быстрым, так как стандарт предусматривает 16-битный минимумint
.Поэтому, в случае теоретического компьютера с супербыстрого 8-битными операциями, неявное продвижение к
int
для арифметики может иметь значение. Однако для многих операций вы не можете определить, действительно ли компилятор выполнял операции с точностьюint
, а затем преобразовывался вchar
для хранения в вашей переменной или если операции выполнялись в символе все время.Например, рассмотрим
unsigned char = unsigned char + unsigned char + unsigned char
, где добавление будет переполняться (допустим, значение 200 для каждого). Если вы повысились доint
, вы получите 600, которые затем будут неявно сбрасываться вunsigned char
, который будет обертывать по модулю 256, таким образом давая окончательный результат 88. Если вы не делали таких рекламных акций, вы бы необходимо обернуть между двумя первыми дополнениями, что уменьшит проблему с200 + 200 + 200
до144 + 200
, что составляет 344, что уменьшится до 88. Другими словами, программа не знает разницы, поэтому компилятор свободен для игнорировать мандат на выполнение промежуточных операций вint
, если операнды имеют более низкий рейтинг, чемint
.Это в целом относится к сложениям, вычитанию и умножению. Это не верно в общем случае для деления или модуля.
Решение к проблеме получило WA (неправильный ответ), затем я изменил один из int
на long long int
и дал AC (принять ) [/ д2]. Раньше я пытался сделать long long int += int * int
, и после того, как исправил его до long long int += long long int * int
. Googling я придумал,
Условия преобразования типов:
Условия Met ---> Конверсия
Целочисленные типы, меньшие, чем int, продвигаются, когда на них выполняется операция. Если все значения исходного типа могут быть представлены как int, значение меньшего типа преобразуется в int; в противном случае он преобразуется в unsigned int. Целочисленные акции применяются как часть обычных арифметических преобразований к некоторым выражениям аргументов; операнды унарных +, - и ~ операторов; и операнды операторов сдвига.
long long int
должен быть больше ранга long int
, который должен быть больше ранга int
, который должен быть больше ранга short int
, который должен быть больше ранга signed char
. Ранг любого беззнакового целочисленного типа должен быть равен рану соответствующего знакового целочисленного типа, если таковой имеется. Ранг любого стандартного целочисленного типа должен быть больше ранга любого расширенного целочисленного типа с одинаковой шириной. Ранг char
должен быть равен рангам signed char
и unsigned char
. Ранг любого расширенного целочисленного типа со знаком, связанного с другим расширенным типом со знаком целого типа с той же точностью, определяется реализацией, но по-прежнему подчиняется другим правилам определения целочисленного ранга преобразования. Для всех целых типов T1, T2 и T3, если T1 имеет больший ранг, чем T2, а T2 имеет больший ранг, чем T3, то T1 имеет больший ранг, чем T3. Caveat!
Конверсии происходят слева направо.
Попробуйте следующее:
int i = 3, j = 2;
double k = 33;
cout << k * j / i << endl; // prints 22
cout << j / i * k << endl; // prints 0
j + i * k
приведет к 101.
– gartenriese
12 October 2015 в 13:48
Если вы исключаете неподписанные типы, есть упорядоченная иерархия: подписанный символ, короткий, int, long, long long, float, double, long double. Во-первых, все, что приходит перед int в приведенном выше, будет преобразовано в int. Затем, в двоичной операции, более низкий ранжированный тип будет преобразован в более высокий, и результаты будут типом высшего. (Вы заметите, что из иерархии, когда задействуются плавающая точка и интегральный тип, интегральный тип будет преобразован в тип с плавающей точкой.)
Unsigned усложняет ситуацию: он возмущает ранжирование и части ранжирования становятся определяемыми. Из-за этого лучше не смешивать подписанные и unsigned в одном выражении. (Большинство экспертов на C ++, похоже, избегают беззнакового, если не задействованы побитовые операции. То есть, по крайней мере, то, что рекомендует Stroustrup.)
int
для числа, которое никогда не должно быть отрицательным, является полной потерей полного 50% доступного диапазона. Я, конечно, не Stroustrup, но по умолчанию использую unsigned
, а signed
- только когда у меня есть причина.
– underscore_d
18 December 2015 в 02:08
Так как другие ответы не говорят о правилах на C ++ 11, вот один из них. Из стандарта C ++ 11 (проект n3337) §5 / 9:
Этот шаблон называется обычными арифметическими преобразованиями , которые определены следующим образом:
. Если какой-либо из операндов имеет тип перечисления с областью действия, конверсии не выполняются; если другой операнд не имеет одного и того же типа, выражение плохо сформировано.
- Если один из операндов имеет тип long double, другой должен быть преобразован в длинный двойной.
- В противном случае, если один из операндов является двойным, другой должен быть преобразован в double.
- В противном случае, если один из операндов является float, другой должен быть преобразован в float.
- В противном случае интегральные рекламные акции должны выполняться на обоих операндах. Затем для продвинутых операндов применяются следующие правила:
- Если оба операнда имеют один и тот же тип, дальнейшее преобразование не требуется.
- В противном случае, если оба операнда имеют подписанные целочисленные типы или оба имеют неподписанные целые типы, операнд с типом ранга меньшего целочисленного преобразования должен быть преобразован в тип операнда с большим рангом.
- В противном случае, если операнд, который имеет неподписанные целочисленный тип имеет ранг, больший или равный рану типа другого операнда, операнд со знаком целочисленного типа должен быть преобразован в тип операнда с целым целым целым числом.
- в противном случае, если тип операнда со знаком целочисленного типа может представлять все значения типа операнда с беззнаковым целочисленным типом, операнд с беззнаковым целым типом должен быть преобразован в тип операнда со знаком целочисленного типа.
- В противном случае оба операнда должны быть преобразованы в unsi gned integer type, соответствующий типу операнда со знаком целочисленного типа.
blockquote> blockquote>См. здесь для часто обновляемого списка.
Арифметические операции с float
приводят к float
.
int + float = float
int * float = float
float * int = float
int / float = float
float / int = float
int / int = int
Для более подробного ответа. Посмотрите, что говорится в разделе §5 / 9 из стандарта C ++.
Многие двоичные операторы, которые ожидают операндов арифметического или перечисляемого типа, вызывают преобразования и вызывают типы результатов аналогичным образом. Цель состоит в том, чтобы дать общий тип, который также является типом результата.
Этот шаблон называется обычными арифметическими преобразованиями, которые определяются следующим образом:
- если либо операнд имеет тип long double, другой должен быть преобразован в длинный двойной.
- В противном случае, если один из операндов является двойным, другой должен быть преобразован в double.
- В противном случае, если любой операнд является float, другой должен быть преобразован в float.
- В противном случае интегральные рекламные акции (4.5) должны выполняться на обоих операндах. [54]
. Затем, если любой из операндов без знака длинный, другой должен быть преобразован в unsigned long.
- В противном случае, если один операнд является длинным int и другим беззнаковым int, то если long int может представлять все значения unsigned int, unsigned int преобразуется в long int; в противном случае оба операнда должны быть преобразованы в unsigned long int.
- В противном случае, если один из операндов длинный, другой должен быть преобразован в длинный.
- В противном случае, если любой из операндов без знака, другой должен быть преобразован в unsigned.
[Примечание: в противном случае единственным оставшимся случаем является то, что оба операнда являются int]
blockquote>
long long
и unsigned long
не рассматриваются здесь.
– chux
7 January 2016 в 19:39
((int) 4) - ((unsigned int) 5)
приведет к4294967295
для 32-битных int и 32-битных неподписанных int. – nitsas 24 April 2013 в 14:15