التحقق من كون رقمين صحيحين يحملان إشارتين متعاكستين

من موسوعة حسوب
< Algorithms
مراجعة 20:13، 28 نوفمبر 2019 بواسطة Mohammed Taher (نقاش | مساهمات)
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)
اذهب إلى التنقل اذهب إلى البحث

تتحقّق هذه الخوارزمية ممّا إذا كان رقمان صحيحان يمتلكان إشارتين مختلفتين دون استخدام أيٍّ من العوامل الرياضية.

لنفترض أنّ x و y هما عددان صحيحان. يأخذ البت الخاص بالإشارة القيمة 1 إذا كان العدد سالبًا، والقيمة 0 إذا كان العدد موجبًا. يمكن استخدام العامل XOR (^) للتحقق من اختلاف الإشارة بين العددين، فإن كانت الإشارتان مختلفتين فإنّ نتيجة المقارنة ستكون تعيين القيمة 1 للبت الخاص بالإشارة، بمعنى أنّ مقارنة x و y باستخدام العامل XOR سيعطي عددًا سالبًا إذا حمل العددان إشارتين سالبتين.

تنفيذ الخوارزمية

تعرض الأمثلة التالية طريقة تنفيذ الخوارزمية في عدد من لغات البرمجة:

  • 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; 
}
  • بايثون:
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"
  • جافا:
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"); 
	} 
}

تعطي الشيفرات السابقة المخرجات التالية:

Signs are opposite

مصادر