Операторы Java, + - что происходит в приведенном ниже коде и почему он так написан [дубликат]

Используйте это, когда dll выполнило это задание:

    CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)FreeLibrary, &__ImageBase, 0, NULL);
    // terminate if dll run in a separate thread ExitThread(0); 
    // or just return out the dll

И __ImageBase - это структура заголовка PE вашей DLL:

EXTERN_C IMAGE_DOS_HEADER __ImageBase;
3
задан Andy Turner 5 March 2019 в 07:57
поделиться

2 ответа

Позвольте мне начать объяснять это на простом примере, рассмотрим

total = + valFromsp;

, указанная выше строка означает total = total + valFromsp;

, аналогичную этому total = - + valFromsp

total = - (total + valFromsp);

Теперь вы можете снова расширить это как total = total - (total + valFromsp)

, рассмотрим пример ниже, который дает тот же результат

    int total = 10;
    int val = 50;
    //total = - + val; //this is also equals to the below line
    total = total - (total + val);
    System.out.println(total); //output -50.
0
ответ дан Syam Danda 5 March 2019 в 07:57
поделиться

Это просто означает следующее:

total = -valFromsp;

Строка кода представляет собой оператор присваивания с выражением в правой части, являющимся + - valFromsp. Что значит + - valFromsp? Если мы добавим скобки, он станет +(-(valFromsp)).

Унарный оператор - оперирует операндом valFromsp, делая его -60. И тогда унарный оператор + работает на -60, ничего не делая с ним.

Унарные операторы + и - определены в §15.15 спецификации языка Java:

Операторы +, -, ++, - , ~,! и оператор приведения (§15.16) называются унарными операторами.

UnaryExpression: 
    PreIncrementExpression 
    PreDecrementExpression 
    + UnaryExpression
    - UnaryExpression 
    UnaryExpressionNotPlusMinus

Использование унарного оператора + дополнительно определено в §15.15.3 :

Унарное числовое продвижение ( §5.6.1 ) выполняется на операнде. Тип унарного выражения плюс является продвинутым типом операнда. Результатом унарного выражения плюс является не переменная, а значение, даже если результатом выражения операнда является переменная.

Но так как вы используете int s, которые не проходят унарное числовое продвижение, + ничего не делает. Даже если вы используете byte, short или char, + все равно ничего не будет делать, потому что унарный оператор - также продвигает. Так что на самом деле нет никакой причины использовать одновременно + и -.

Я предлагаю вам просто изменить его на:

total = -valFromsp;

, чтобы избежать путаницы в будущем.

0
ответ дан Sweeper 5 March 2019 в 07:57
поделиться
Другие вопросы по тегам:

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