diff --git a/ch3/ch3-01.md b/ch3/ch3-01.md index e71a2fe..c62ac92 100644 --- a/ch3/ch3-01.md +++ b/ch3/ch3-01.md @@ -12,7 +12,7 @@ Unicode字符rune类型是和int32等价的类型,通常用于表示一个Unic 不管它们的具体大小,int、uint和uintptr是不同类型的兄弟类型。其中int和int32也是不同的类型,即使int的大小也是32bit,在需要将int当作int32类型的地方需要一个显式的类型转换操作,反之亦然。 -其中有符号整数采用2的补码形式表示,也就是最高bit位用来表示符号位,一个n-bit的有符号数的值域是从$$-2^{n-1}$$到$$2^{n-1}-1$$。无符号整数的所有bit位都用于表示非负数,值域是0到$$2^n-1$$。例如,int8类型整数的值域是从-128到127,而uint8类型整数的值域是从0到255。 +其中有符号整数采用2的补码形式表示,也就是最高bit位用来表示符号位,一个n-bit的有符号数的值域是从$-2^{n-1}$到$2^{n-1}-1$。无符号整数的所有bit位都用于表示非负数,值域是0到$2^n-1$。例如,int8类型整数的值域是从-128到127,而uint8类型整数的值域是从0到255。 下面是Go语言中关于算术运算、逻辑运算和比较运算的二元运算符,它们按照先级递减的顺序的排列: @@ -101,7 +101,7 @@ fmt.Printf("%08b\n", x>>1) // "00010001", the set {0, 4} (6.5节给出了一个可以远大于一个字节的整数集的实现。) -在`x<>n`移位运算中,决定了移位操作bit数部分必须是无符号数;被操作的x数可以是有符号或无符号数。算术上,一个`x<>n`右移运算等价于除以$$2^n$$。 +在`x<>n`移位运算中,决定了移位操作bit数部分必须是无符号数;被操作的x数可以是有符号或无符号数。算术上,一个`x<>n`右移运算等价于除以$2^n$。 左移运算用零填充右边空缺的bit位,无符号数的右移运算也是用0填充左边空缺的bit位,但是有符号数的右移运算会用符号位的值填充左边空缺的bit位。因为这个原因,最好用无符号运算,这样你可以将整数完全当作一个bit位模式处理。 @@ -114,7 +114,7 @@ for i := len(medals) - 1; i >= 0; i-- { } ``` -另一个选择对于上面的例子来说将是灾难性的。如果len函数返回一个无符号数,那么i也将是无符号的uint类型,然后条件`i >= 0`则永远为真。在三次迭代之后,也就是`i == 0`时,i--语句将不会产生-1,而是变成一个uint类型的最大值(可能是$$2^64-1$$),然后medals[i]表达式将发生运行时panic异常(§5.9),也就是试图访问一个slice范围以外的元素。 +另一个选择对于上面的例子来说将是灾难性的。如果len函数返回一个无符号数,那么i也将是无符号的uint类型,然后条件`i >= 0`则永远为真。在三次迭代之后,也就是`i == 0`时,i--语句将不会产生-1,而是变成一个uint类型的最大值(可能是$2^64-1$),然后medals[i]表达式将发生运行时panic异常(§5.9),也就是试图访问一个slice范围以外的元素。 出于这个原因,无符号数往往只有在位运算或其它特殊的运算场景才会使用,就像bit集合、分析二进制文件格式或者是哈希和加密操作等。它们通常并不用于仅仅是表达非负数量的场合。 diff --git a/ch3/ch3-03.md b/ch3/ch3-03.md index 06ade25..a132eef 100644 --- a/ch3/ch3-03.md +++ b/ch3/ch3-03.md @@ -89,7 +89,7 @@ func mandelbrot(z complex128) color.Color { **练习 3.6:** 升采样技术可以降低每个像素对计算颜色值和平均值的影响。简单的方法是将每个像素分成四个子像素,实现它。 -**练习 3.7:** 另一个生成分形图像的方式是使用牛顿法来求解一个复数方程,例如$$z^4-1=0$$。每个起点到四个根的迭代次数对应阴影的灰度。方程根对应的点用颜色表示。 +**练习 3.7:** 另一个生成分形图像的方式是使用牛顿法来求解一个复数方程,例如$z^4-1=0$。每个起点到四个根的迭代次数对应阴影的灰度。方程根对应的点用颜色表示。 **练习 3.8:** 通过提高精度来生成更多级别的分形。使用四种不同精度类型的数字实现相同的分形:complex64、complex128、big.Float和big.Rat。(后面两种类型在math/big包声明。Float是有指定限精度的浮点数;Rat是无限精度的有理数。)它们间的性能和内存使用对比如何?当渲染图可见时缩放的级别是多少?