Рубрики

Определить, если два целых имеют противоположные знаки

Учитывая два целых числа со знаком, напишите функцию, которая возвращает истину, если знаки заданных целых чисел различны, иначе ложь. Например, функция должна возвращать true -1 и +100 и должна возвращать false для -100 и -200. Функция не должна использовать ни одного из арифметических операторов.

Пусть заданные целые числа будут х и у. Знаковый бит равен 1 в отрицательных числах и 0 в положительных числах. XOR x и y будет иметь бит знака как 1, если они имеют противоположный знак. Другими словами, XOR x и y будет отрицательным числом, если x и y имеют противоположные знаки. Следующий код использует эту логику.

C ++

// C ++ программа для обнаружения
// если два целых числа имеют противоположные знаки
#include<stdbool.h>
#include<stdio.h>

  

bool oppositeSigns(int x, int y)

{

    return ((x ^ y) < 0);

}

  

int main()

{

    int x = 100, y = -100;

    if (oppositeSigns(x, y) == true)

       printf ("Signs are opposite");

    else

      printf ("Signs are not opposite");

    return 0;

}

Джава

// Java-программа для обнаружения
// если два целых числа имеют противоположные знаки

  

class GFG {

  

    static boolean oppositeSigns(int x, int y)

    {

        return ((x ^ y) < 0);

    }

      

    public static void main(String[] args)

    {

        int x = 100, y = -100;

        if (oppositeSigns(x, y) == true)

            System.out.println("Signs are opposite");

        else

            System.out.println("Signs are not opposite");

    }

}

  
// Этот код предоставлен prerna saini.

python3

# Python3 Программа для обнаружения
# если два целых числа имеют
# противоположные знаки.

def oppositeSigns(x, y):

    return ((x ^ y) < 0);

  

x = 100

y = 1

  

if (oppositeSigns(x, y) == True):

    print "Signs are opposite"

else:

    print "Signs are not opposite"

  
# Эта статья предоставлена Prerna Saini.

C #

// C # Программа для обнаружения
// если два целых числа имеют
// противоположные знаки.

using System;

  

class GFG {

  

    // Функция для обнаружения признаков

    static bool oppositeSigns(int x, int y)

    {

        return ((x ^ y) < 0);

    }

      

    // Код драйвера

    public static void Main()

    {

        int x = 100, y = -100;

        if (oppositeSigns(x, y) == true)

            Console.Write("Signs are opposite");

        else

            Console.Write("Signs are not opposite");

    }

}

  
// Этот код предоставлен Нитином Митталом.

PHP

<?php
// Программа PHP для обнаружения, если два
// целые числа имеют противоположные знаки.

  

function oppositeSigns($x, $y)

{

    return (($x ^ $y) < 0);

}

  

    // Код драйвера

    $x = 100;

    $y = -100;

    if (oppositeSigns($x, $y) == true)

    echo ("Signs are opposite");

    else

    echo ("Signs are not opposite");

      
// Этот код предоставлен vt_m.
?>


Выход:

Signs are opposite

Источник: Определить, если два целых имеют противоположные знаки

Мы также можем решить эту проблему, используя два оператора сравнения. Смотрите следующий код.

bool oppositeSigns(int x, int y)

{

    return (x < 0)? (y >= 0): (y < 0);

}

Первый способ более эффективен. Первый метод использует побитовый XOR и оператор сравнения. Второй метод использует два оператора сравнения, и побитовая операция XOR более эффективна по сравнению с операцией сравнения.

Мы также можем использовать следующий метод. Он не использует оператор сравнения. Метод предложен Хунлян и улучшен Гауравом.

bool oppositeSigns(int x, int y)

{

    return ((x ^ y) >> 31);

}

Функция написана только для компиляторов, где размер целого числа составляет 32 бита. Выражение в основном проверяет знак (x ^ y), используя побитовый оператор '>>'. Как упоминалось выше, знаковый бит для отрицательных чисел всегда равен 1. Знаковый бит — это самый левый бит в двоичном представлении. Поэтому нам нужно проверить, равен ли 32-й бит (или самый левый бит) x ^ y 1 или нет. Мы делаем это путем смещения вправо значения x ^ y на 31, так что знаковый бит становится младшим значащим битом. Если знаковый бит равен 1, то значение (x ^ y) >> 31 будет равно 1, иначе 0.

Пожалуйста, пишите комментарии, если вы обнаружите, что какой-либо из приведенных выше кодов / алгоритмов неверен, или найдете другие способы решения той же проблемы.

Рекомендуемые посты:

Определить, если два целых имеют противоположные знаки

0.00 (0%) 0 votes