0
在C中,我編寫了一個程序,它使用二分查找搜索有序數組中的數字。我在程序的一部分中使用了以下代碼來定義兩個變量,中間和檢查。C爲什麼3除以2等於0,而是1等於1?
(n是陣列的尺寸)
int middle = 0;
int check = 0; //Checks if array holds an odd or even amount of numbers
check = n/2;
printf("check = %d\n", check);
出於某種原因,支票被顯示爲0,而不是爲一體。但是,更令我困惑的是,在我將n/2分配給它之後,中間就等於一個。
//Is there an even amount of numbers?
printf("n = %d\n', n);
printf("Checking if array is even or odd.\n');
printf('Check starts out equaling %d after being divided\n", check);
while (check > 1)
{
check = check/2;
printf("Check equals %d\n", check);
}
if (check == 0)
{
//Number is even
middle = n/2;
printf("Even amount, middle = %d\n", middle);
}
else
{
//Number is odd
middle = (n - 1)/2;
printf("Odd amount, middle = %d\n", middle);
}
當我運行代碼時,使用由數字2,3和4組成的數組,我得到以下結果。
check = 0
Even amount, middle equals 1
爲什麼檢查等於零和中間等於一,當兩者都是int並且等於相同的公式時?我希望兩者等於一,但不明白爲什麼檢查等於零。
使用'檢查%2'來確定'檢查'是奇數還是偶數 – simonc
你已經描述了一個不可能的情況,並用不完整的代碼片段來說明它。發佈一個完整的,可運行的程序來演示異常情況。正確的結果是'3/2 == 1'。 – ooga
當我執行你的代碼與int n = 3;我得到的結果是「check = 1 奇數,中等= 1」。奇怪的答案是錯誤的你 – Sorcrer