From 4b455673e0b01b9cce49beb9737d8dceabe5c63d Mon Sep 17 00:00:00 2001 From: Lorna Lan <35405703+LornaLan@users.noreply.github.com> Date: Mon, 8 Apr 2019 19:15:52 -0400 Subject: [PATCH] Changed some grammatical issues (#23574) * Changed some grammatical issues * Finished fixing the document's grammatical error --- guide/chinese/c/more-math/index.md | 79 ++++++++++++++++-------------- 1 file changed, 41 insertions(+), 38 deletions(-) diff --git a/guide/chinese/c/more-math/index.md b/guide/chinese/c/more-math/index.md index d52b11272e..1e8eecb7c5 100644 --- a/guide/chinese/c/more-math/index.md +++ b/guide/chinese/c/more-math/index.md @@ -2,9 +2,9 @@ title: More math localeTitle: 更多数学 --- -# C中的数学更多 +# C中的更多数学 -好的,所以你已经看过了基础知识。不过,在C中还有更多,所以这里有一个看看。 +好的,所以你已经看过了基础知识。不过,在C中还有更多数学运算符,所以这里我们继续列举几个常用的。 ## 运营顺序 @@ -12,7 +12,7 @@ localeTitle: 更多数学 > 1 +(3-2)\* 5 -如果我们只是从左到右阅读和计算,我们将取1,加3,减2,乘以5得到10.然而,这忽略了操作的顺序。我们应该先做(3-2),得到1,然后乘以5,再加1.这给出了6的答案。 +如果我们只是从左到右阅读和计算,我们将取1,加3,减2,乘以5得到10。然而,这忽略了操作的顺序。我们应该先做(3-2),得到1,然后乘以5,再加1.这给出了6的答案。 就像常规数学一样,C有一个操作顺序。操作具有优先权,如果一个操作的优先级高于另一个操作,则首先计算优先级越高。使用括号可以增加该优先级,就像在普通数学中一样。 @@ -26,13 +26,13 @@ localeTitle: 更多数学 ```C 1: a++; - 2: ++a; +2: ++a; - 3: a--; - 4: --a; +3: a--; +4: --a; ``` -1和2处的示例都将a的值增加1。 3和4处的两个示例都将a的值减小1。但是,1与2不完全相同,3与4不完全相同。预修复运算符称为此,因为操作是前缀(2和4是我们的前缀运算符)。这与我们在1和3的后期修复操作符略有不同。预修复操作符执行操作,然后返回值。修复后操作符返回值,然后执行增量。 +1和2处的示例都将a的值增加1。 3和4处的两个示例都将a的值减小1。但是,1与2不完全相同,3与4不完全相同。2和4中的运算符 ++ 叫预修复运算符,因为符号是前缀,在变量前被读取。这与我们在1和3的后修复操作符略有不同。预修复操作符先执行操作,然后再更新变量值。后修复操作符先返回值,然后再执行增量。 ### 一元加减 @@ -49,25 +49,25 @@ int number = -3; ## 按位运算 -因为C是如前所述的低级别,所以您可以访问各个二进制位(如果您选择利用它)。内置了一些二进制操作让我们这样做。对于这些示例,我们将使用`a`和`b`作为变量。它们可以是任何类型的变量,因为所有变量都将以位表示,因此确切的数据类型对于这些变量无关紧要。 +因为C是如前所述的低级别语言,所以您可以使用C访问各个二进制位(如果您选择利用它)。C中内置了一些二进制操作给予了我们这样做的能力。对于这些示例,我们将使用`a`和`b`作为变量。它们可以是任何类型的变量,因为所有变量都将以位表示,因此确切的数据类型对于这些变量无关紧要。 ### 和 -`c = a & b;`将执行按位AND。这意味着如果`a`的第一位和`b`的第一位都是1,则c的第一位将为1,否则为0。如果`a`和`b`的第二位都是1,则c的第二位将为1,否则为0。这种情况一直持续到所有比特都被用完为止。 +`c = a & b;`将执行按位AND。这意味着如果`a`的第一位和`b`的第一位都是1,则c的第一位将为1,否则为0。如果`a`和`b`的第二位都是1,则c的第二位将为1,否则为0。这种情况一直持续到所有比特都被读取过为止。 -### 要么 +### 或 -`c = a | b;`将执行按位OR。的第一比特`c`是1,如果在任一第一比特`a`或`b`是1,第二位是1,如果在任一所述第二位`a`或`b`是1,依此类推。 +`c = a | b;将执行按位OR。如果`c`的第一比特是1,如果在任一`a`或`b`的第一比特是1;如果`a`和`b`的第一比特都是0,那么`c`的第一比特就是0。第二位、第三位如此类推。 -### 不 +### 否 -`b = ~a;`将设置`b`到的一个补`a` ,这意味着任何1变成0和0的任何一个变为1。 +`b = ~a;`将设置`b`到的一个补`a` ,这意味着`a`的任意一位是`b`的互补数;`a`的某个位置上的1会变成`b`相应位置上的0,而0会变成1。 -### XOR +### 异或 -`c = a ^ b;`将执行按位异或。这是一个异或,意味着如果`a`或`b`为1,则`c`的第一位为1,但不是两者。如果其中一个为1但不是两个,则第二个位为1,依此类推。 +`c = a ^ b;`将执行按位异或。这意味着如果`a`的第一位或`b`的第一位为1,则`c`的第一位为1,但`a`和`b`不能同时为1。如果`a`和`b`的某个位置同时为1或0,那么`c`的相应位置会是0。依此类推。 -### 转移 +### 位移 按位移位将取位并将它们移动到左侧或右侧的某些位置。例如,假设我们有一组位: `101110` 。当位移时,C执行算术移位。让我们用一张表来说明一点: @@ -99,29 +99,29 @@ c = a >> b; ## 复合赋值运算符 -有时您希望将变量增加一定值。你可以这样做: +有时您希望将变量增加一定值。在C中,您可以这样做: ```C a = a + b; ``` -但是,这就是复合赋值运算符的用途。相反,你可以写这个,它完全相同: +但是,这样的写法不够简练。这时,复合赋值运算符就派上了它的用场。以上的算法可以用复合赋值运算符更精炼地表达,如下所示: ```C a += b; ``` -对于许多其他运营商也存在这种情况。这是一个方便的桌子给你: +对于许多其他运算也存在这种情况。以下是给您的一个汇总表格: 短路|漫长的道路 :--------------:|:------------: `a += b` | `a = a + b` `a -= b` | `a = a - b` `a *= b` | `a = a * b` `a /= b` | `a = a / b` `a %= b` | `a = a % b` `a &= b` | `a = a & b` `a ^= b` | `a = a ^ b` `a <<= b` | `a = a << b` `a >>= b` | `a = a >> b` -还有`|=` ,因为`|`而不在表上角色打破了桌子。但它确实像所有这些其他操作一样。 +还有`|=` ,因为`|`会破坏桌子的格式,但它确实像所有这些其他操作一样,也是一种合理的运算。 -## 铸件 +## 铸件 (typecasting) -有时你不希望数字是一个数字,或者你想要一个整数是浮点数,或类似的东西。这就是铸造的目的。 +有时你不希望变量是一个数字,或者你想要一个整数变成浮点数,或类似的东西。这就是铸造的目的。 -正如您从整数除法的讨论中回忆的那样,下面的示例将给出一个没有任何小数的整数值,因为进入的两个数字都是整数: +正如您从整数除法的讨论中回忆的那样,下面的示例的输入都是整数值,但它们的商是非整数,而C的printf语句只接受某种特定的变量类型,所以我们需要将它们的商转化成整数类型,才能被显示出来: ```C #include @@ -130,11 +130,13 @@ a += b; int a = 12; int b = 5; - printf("a divided by b is %i", a/b); + printf("a divided by b is %i", (int) a / b); } ``` -但是,使用铸造,我们可以使用铸造将它们变成浮子。这允许将它们划分为浮点数,并且等式将返回浮点值: +其printf语句中的%i代表整数类型,(int) 这个操作就是铸件。铸件可以转换变量类型。 + +如果您想将a和b的商这个数字更准确地显示到屏幕上,你可以将这个商变成浮点数: ```C #include @@ -147,38 +149,39 @@ a += b; } ``` -现在它是一个浮点数12除以5,所以这将返回一个浮点数,该数字在小数位后不会截断。 +现在它是一个浮点数,注意这里printf语句中的预留位是%f,是为浮点数准备的。所以这里将显示商为浮点数,该数字会保留一定的小数位数。 -要将数字转换为`int` ,请使用`(int)`将其转换为`double` ,使用`(double)` ,依此类推。 +要将数字转换为`int` ,请使用`(int)`将其转换为`double` ,使用`(double)` ,其他同理。 ## MATH.H -这就是所有内置的东西,但就像你可以`#include` stdio和stdbool一样,你可以包含一个名为`math.h`的库。该库具有各种有用的功能,适用于各种数学。如果你想要完整的功能列表,那么值得阅读[维基百科页面](https://en.wikipedia.org/wiki/C_mathematical_functions#Overview_of_functions) 。这是一个关于如何使用`abs`的例子,这是他们列表中的第一个: +这就是所有内置的东西,但就像你可以`#include` stdio和stdbool一样,你可以包含一个名为`math.h`的库。该库具有各种有用的功能,适用于解决各种数学问题。如果你想要完整的功能列表,那么这个页面值得阅读[维基百科页面](https://en.wikipedia.org/wiki/C_mathematical_functions#Overview_of_functions) 。这里有一个关于如何使用`abs`的例子,这是他们列表中的第一个: ```C a = abs(-1); ``` -`abs`计算传递给它的值的绝对值。在这种情况下,它收到-1,所以它会把它变成1, `a`将等于1.还有更多可以提供更多的功能,这就是你能够做指数,三角学,以及更多。 +`abs`计算传递给它的值的绝对值。在这种情况下,它收到-1,所以它会把它变成1, `a`将等于1。MATH.H库还有更多可以提供更多的功能,这就是你能够做指数,三角学,以及更多。 # 在你继续之前...... ## 回顾 -* 在C中有更多的数学运算符 +* 在C中有许多的数学运算符 * C中存在操作顺序 -* 括号存在并且像常规数学一样工作以改变操作顺序 -* 有一些一元操作,这些操作只有一个变量: +* 可以使用括号并且它像常规数学一样工作以改变操作顺序 +* 一元操作,这些操作只有一个变量: * post-fix和pre-fix运算符用于加1和减1 * 添加一个: `++a;`或者`a++;` * 减去一个: - `--a`或'a--' * `-`可以放在变量或数字的前面,就像数学中的负数一样 * 也有一些按位操作 -* 和完成& -* 或者用|完成 -* 不是用〜完成的 -* XOR用^完成(XOR不适用于C中的浮点型号) +* 和用&完成 +* 或者是用|完成 +* 不是是用〜完成的 +* 异或用^完成(异或不适用于C中的浮点型号) * 所有非一元操作都存在复合赋值操作 * a + = b与a = a + b相同,依此类推 -* Casting允许您在数据类型之间进行交换 -* math.h有更多的数学东西可供使用 +* 铸件(typecasting)允许您在数据类型之间进行交换 +* MATH.H有更多的数学工具和函数可供使用 +