[英]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.