! do while 循环中的运算符
! operator in do while loop
我只是在做一个关于 C 中插入排序的教程,我正在努力理解 !运算符用作 do while 循环的条件。
条件只是 while (!done)
但我不明白它是如何知道 what 不应该等于变量 done 的。 while (done==0)
之类的东西对我来说更有意义。
我才刚刚开始编码,如果答案真的很明显,我深表歉意!我试着用谷歌搜索,但我发现很难表达问题...
代码如下:
void insertionSortArray (int arr[])
{
for(int i = 1; i < SIZE; i++)
{
int value = arr[i];
int j = i -1;
int done = 0;
do
{
if (arr[j]>value)
{
arr [j+1] = arr[j];
j - -;
if (j<0)
done = 1;
}
else
done = 1;
} while (!done);
arr [j+1] = value;
}
}
谢谢!!
它们完全一样。 !done
和 done == 0
可以互换。关于 C 的事情是:它很长一段时间没有 "true" 布尔类型。布尔值仅在 C99 中引入。
所有零值都被认为是假的,其他值都是真的。这就是为什么 !done
为真,只要 done == 0
(done
为 0 -> 假,!false
-> true
)。 !
是合乎逻辑的 NOT 运算符,一如既往,并且做它做的事情:否定后面的任何内容。因此 done = 0
=> done
是假的,!done
-> 假的相反,是真的。
如果您觉得 done == 0
更容易阅读,那么一定要这样写。虽然,更常见的是看到较短的版本。
False/true 检查 非常 常见:
type *foo = malloc(123 * sizeof *foo);
if (!foo)
exit(1); // failed to alloc memory
void my_function(int *ptr, size_t size)
{
if (!ptr)
return; // a NULL pointer was passed
// ...
}
TL;DR
因为这两种说法是可以互换的,所以请写下您认为最有意义的内容。也许大声朗读这两个陈述(虽然看起来很傻)会让你改变主意:
while done equals zero
//vs
while not done
现在这两个句子中哪一个最有道理?
我只是在做一个关于 C 中插入排序的教程,我正在努力理解 !运算符用作 do while 循环的条件。
条件只是 while (!done)
但我不明白它是如何知道 what 不应该等于变量 done 的。 while (done==0)
之类的东西对我来说更有意义。
我才刚刚开始编码,如果答案真的很明显,我深表歉意!我试着用谷歌搜索,但我发现很难表达问题...
代码如下:
void insertionSortArray (int arr[])
{
for(int i = 1; i < SIZE; i++)
{
int value = arr[i];
int j = i -1;
int done = 0;
do
{
if (arr[j]>value)
{
arr [j+1] = arr[j];
j - -;
if (j<0)
done = 1;
}
else
done = 1;
} while (!done);
arr [j+1] = value;
}
}
谢谢!!
它们完全一样。 !done
和 done == 0
可以互换。关于 C 的事情是:它很长一段时间没有 "true" 布尔类型。布尔值仅在 C99 中引入。
所有零值都被认为是假的,其他值都是真的。这就是为什么 !done
为真,只要 done == 0
(done
为 0 -> 假,!false
-> true
)。 !
是合乎逻辑的 NOT 运算符,一如既往,并且做它做的事情:否定后面的任何内容。因此 done = 0
=> done
是假的,!done
-> 假的相反,是真的。
如果您觉得 done == 0
更容易阅读,那么一定要这样写。虽然,更常见的是看到较短的版本。
False/true 检查 非常 常见:
type *foo = malloc(123 * sizeof *foo);
if (!foo)
exit(1); // failed to alloc memory
void my_function(int *ptr, size_t size)
{
if (!ptr)
return; // a NULL pointer was passed
// ...
}
TL;DR
因为这两种说法是可以互换的,所以请写下您认为最有意义的内容。也许大声朗读这两个陈述(虽然看起来很傻)会让你改变主意:
while done equals zero
//vs
while not done
现在这两个句子中哪一个最有道理?