簡體   English   中英

C編程:如果沒有==,如何比較兩種類型

[英]C programming: How could you compare two types without ==

我想知道C編譯器將如何處理比較運算符'=='

我希望創建一個函數(用C語言編寫)來比較兩件事,而不使用==。 我認為可以通過使用按位運算符(&,|,^,>>)來完成某些操作,但是我似乎沒想到該怎么做。

有人有主意嗎?

謝謝!

這是不使用==來檢查兩個整數是否相等的簡單方法:

int x = 3;
int y = 3;

if(x < y || y < x)
    printf("Not equal");
else
    printf("Equal");

對於整數類型, if (!(a - b))將起作用。

您可能會遇到其他類型的有趣問題。

也許if (!(a ^ b))

不使用==

int is_a_equal_to_b(int a, int b)
{
    if (a > b || a < b) return 0; /* Not equal. */
    return 1;                     /* Equal.     */
}

如果您將一個值的每一位取反,然后將兩個值“&”在一起,該怎么辦? 如果結果為零,則它們應該相等。

int x=5;
int y=5;
int z=(~x)&y;

if(!(y>0||y<0)){
   //Values are equal. 
}

您為什么不想使用“ ==”運算符?

由於您想知道編譯器是如何完成的,因此它將==轉換為包含cmp指令的機器代碼。 該指令比較兩個操作數,並存儲比較結果。 可以檢查結果以查看操作數是否相等,不相等,小於,大於等。

if語句中使用==的情況下,可能會生成以下內容:

cmp op1, op2
jne else_address

這基本上意味着“比較這兩個值。 如果它們不相等,則跳到else塊。

其他答案也不錯,但是如果只希望按位運算符,請執行以下操作:

int is_equal(int a,int b) {
 int bit=1;
 while(bit) {
  if ((a&bit)^(b&bit)) return 0;
  bit<<=1;
 }
 return 1;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM