Java математическая функция для преобразования положительного Int в отрицательный и отрицательный в положительный? - PullRequest
40 голосов
/ 24 октября 2011

Существует ли функция Java для преобразования положительного значения int в отрицательное и отрицательного значения int в положительное?

Я ищу reverse функцию для выполнения этого преобразования:

-5  ->  5
 5  -> -5

Ответы [ 10 ]

196 голосов
/ 24 октября 2011

А как насчет x *= -1;?Вы действительно хотите использовать библиотечную функцию для этого?

71 голосов
/ 24 октября 2011
x = -x;

Это, наверное, самый тривиальный вопрос, который я когда-либо видел.

... и почему вы бы назвали эту тривиальную функцию 'reverse ()' еще одной загадкой.

45 голосов
/ 24 октября 2011

Просто используйте унарный минус оператор :

int x = 5;
...
x = -x; // Here's the mystery library function - the single character "-"

Java имеет два минус операторов :

  • знакомая арифметическая версия (например, 0 - x) и
  • унарная операция минус (используется здесь), которая сводит (одиночный) операнд

Компилируется и работает как положено.

10 голосов
/ 02 марта 2014

Другой метод (дополнение 2):

public int reverse(int x){
    x~=x;
    x++;
    return x;
}

Сначала выполняется дополнение (путем добавления всех битов), а затем добавляется 1 к x. Этот метод также выполняет свою работу.

Примечание: этот метод написан на Java и будет похож на многие другие языки

7 голосов
/ 25 декабря 2015

оригинал * = -1;

Простая строка кода, оригинал - это любой код, который вам нужен.

6 голосов
/ 08 августа 2014

Такой функции не существует или ее можно написать.

Проблема заключается в случае ребра Integer.MIN_VALUE (-2 147 483 648 = 0x80000000) примените каждый из трех указанных выше методов, и вы получите одно и то же значение.Это происходит из-за представления целых чисел и максимально возможного целого числа Integer.MAX_VALUE (-2 147 483 647 = 0x7fffffff), которое на единицу меньше значения -Integer.MIN_VALUE.

3 голосов
/ 08 августа 2014

Некромантия здесь.Очевидно, x *= -1; слишком просто.Вместо этого мы могли бы использовать тривиальное двоичное дополнение:

number = ~(number - 1) ;

Примерно так:

import java.io.*;

/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
    public static void main (String[] args) throws java.lang.Exception
    {
        int iPositive = 15;
        int iNegative = ( ~(iPositive - 1) ) ; // Use extra brackets when using as C preprocessor directive ! ! !...
        System.out.println(iNegative);

        iPositive =  ~(iNegative - 1)  ;
        System.out.println(iPositive);

        iNegative = 0;
        iPositive = ~(iNegative - 1);
        System.out.println(iPositive);


    }
}

Таким образом, мы можем гарантировать, что посредственные программисты не понимают, что происходит;)

2 голосов
/ 08 января 2015

Да, как уже отмечал Джеффри Босбоом (Извините, Джеффри, я не заметил ваш комментарий, когда отвечал), есть такая функция: Math.negateExact

и

Нет, вы, вероятно, не должны его использовать.Нет, если вам не нужна ссылка на метод .

1 голос
/ 25 декабря 2015

Вы можете использовать оператор минус или Math.abs. Они работают для всех отрицательных целых чисел, КРОМЕ для Integer.MIN_VALUE! Если вы сделаете 0 - MIN_VALUE, ответ по-прежнему будет MIN_VALUE.

0 голосов
/ 10 ноября 2017

Вы можете использовать Math:

int x = Math.abs(-5);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...