0
我需要比較兩個字符緊跟在例如兩個字符: 例子:比較使用位運算符
COMPARE('a','z') Will return -1
COMPARE('a','A') Will return -1
COMPARE('g','g') WIll return 0
COMPARE('A','a') Will return 1
在一般情況下,我需要比較他們就像在功能:strcmp()
, 但我需要使用Comparsion的按位運算符。 這是我現在所做的。
int Lcmp(char unsigned first,char unsigned sec)
{
int i;
char unsigned mask=0x80; //mask = 10000000 in binary
for(i=0;i<7;i++)
{
if(first&mask&&(!(sec&mask))) //first>sec, Beacuase first had the sum 2^7
{
return 1;
}
else if((!(first&mask))&&(sec&mask)) //first<sec " " " "
{
return -1;
}
mask>>=1; //move the comparsion bit rigth
}
return 0; //CASE: first==sec
}
我的問題是;此代碼不起作用。 當我的意思是不工作:它總是給我沒有任何模式的假結果。 請修復它,謝謝。 注:我需要的功能應該在字典比較
編輯:
I added this statment after the mask decleretion.
if(first<'a'&&sec>='a')
first^=mask;
else if(first>='a'&&sec<'a')
sec^=mask;
我做什麼是去除MSB當且僅當其中之一是上,給人一種advetege的小寫字母。
但方法的第一個if-子句中完成,因爲它總是返回一些東西,結束Lcmp。 –
您應該通過調試器來運行它,並在監視變量和表達式的同時逐行執行函數。 –
@JoachimPileborg:有一個看OP的此評論:http://stackoverflow.com/questions/17389530/sorting-text-file-with-bubble-sort-in-c#comment25245963_17389530。 –