首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Go的类型及减法

Go的类型及减法
EN

Stack Overflow用户
提问于 2013-08-07 23:26:33
回答 2查看 3.6K关注 0票数 3

我是一个入门的围棋编程语言,我是拉我的头发在这个例子程序。

通过$ go run <filename>.go 1 (或任何其他整数)执行程序

我的问题如下:

请集中注意程序中的以下一行

代码语言:javascript
复制
digit := stringOfDigits[column] - '0'

如果我跑了

代码语言:javascript
复制
fmt.Println(stringOfDigits[column])

这将返回50

如果我跑了

代码语言:javascript
复制
fmt.Println(digit)

这将返回2

那么,50 - '0‘怎么等于2?

为什么stringOfDigits[column]返回50?就像50个人是怎么进去的?

还有,'0‘和’0‘之间有什么区别,引号重要吗?

在程序中,'0‘将在"0“将破坏程序的地方运行。

代码块:

代码语言:javascript
复制
package main

import (
    "fmt"
    "log"
    "os"
    "path/filepath"
)

func main() {
    if len(os.Args) == 1 {
        fmt.Printf("usage: %s <whole-number>\n", filepath.Base(os.Args[0]))
        os.Exit(1)
    }

    stringOfDigits := os.Args[1]
    for row := range bigDigits[0] {
        line := ""
        for column := range stringOfDigits {
            digit := stringOfDigits[column] - '0'
            if 0 <= digit && digit <= 9 {
                line += bigDigits[digit][row] + "  "
            } else {
                log.Fatal("invalid whole number")
            }
        }
        fmt.Println(line)
    }
}

var bigDigits = [][]string{
    {"  000  ",
     " 0   0 ",
     "0     0",
     "0     0",
     "0     0",
     " 0   0 ",
     "  000  "},
    {" 1 ", "11 ", " 1 ", " 1 ", " 1 ", " 1 ", "111"},
    {" 222 ", "2   2", "   2 ", "  2  ", " 2   ", "2    ", "22222"},
    {" 333 ", "3   3", "    3", "  33 ", "    3", "3   3", " 333 "},
    {"   4  ", "  44  ", " 4 4  ", "4  4  ", "444444", "   4  ",
        "   4  "},
    {"55555", "5    ", "5    ", " 555 ", "    5", "5   5", " 555 "},
    {" 666 ", "6    ", "6    ", "6666 ", "6   6", "6   6", " 666 "},
    {"77777", "    7", "   7 ", "  7  ", " 7   ", "7    ", "7    "},
    {" 888 ", "8   8", "8   8", " 888 ", "8   8", "8   8", " 888 "},
    {" 9999", "9   9", "9   9", " 9999", "    9", "    9", "    9"},
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-08 03:27:15

'0'是一个字符,不等于0'0'实际上是一个符文文字,它由一个等于48的字符(字节)组成。stringOfDigits[column]byte

当使用单个字符时,它将与ASCII表匹配。

为了获得正确的结果,可以从每个字节值中减去48,假设您只使用0-9个位数:

代码语言:javascript
复制
stringOfDigits[column] - 48 - ('0' - 48)

我猜你是想忽略空格。空格等于32,因此您可以执行如下条件:

代码语言:javascript
复制
if stringOfDigits[column] == 32 { // Same thing: == ' '
    continue;
}

或者,您可以使用斯特康夫包来转换大于9的数字。

票数 6
EN

Stack Overflow用户

发布于 2013-08-22 21:35:55

'0'是一个具有值48的符文文字。The 说明书上说

一个符文文字表示一个符文常量,一个识别Unicode代码点的整数值。符文文字用单引号括起来的一个或多个字符表示。

文字符也是非类型化常量:

常量可以是类型化的或非类型化的。文字常量、true、false、iota和某些仅包含非类型化常量操作数的常量表达式是非类型化的。 常数可以通过常量声明或转换显式地给出类型,也可以在变量声明或赋值中或作为运算数在表达式中隐式使用。

这意味着在这个短语中:

代码语言:javascript
复制
digit := stringOfDigits[column] - '0'

常量'0'和结果变量digit都将隐式地从表达式stringOfDigits[column]获取它们的类型,表达式stringOfDigits[column]的类型是byte (uint8的别名),因为stringOfDigitsstring

digit成为byte(2)的唯一方法是stringOfDigit[column]byte(50),也可以拼写为byte('2')

50 - '0'就是这样变成2的。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18115458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档