package main
import "fmt"
func main() {
fmt.Println(byte('0'))
}
为什么在Mac上运行此代码并显示 48 而不是 0 ?
在c char'0'中始终等于数字0,请向我解释一下,否则我完全错了!
答案 0 :(得分:3)
这是fmt
软件包的工作方式。 fmt.Println()
的参数将使用 default 格式,其中%d
用于整数值(例如byte
,int
等,甚至rune
)表示打印其以10为底的数字表示形式。 '0'
是rune literal,当传递给fmt.Println()
时,它将采用rune
类型,它是int32
的别名,因此它是一个整数值,它具有十进制值48
。
fmt.Println('0', rune('0'), byte('0'))
此打印:
48 48 48
如果要打印字符,请将其转换为string
,或使用带有%c
动词的格式字符串:
fmt.Println(string('0'))
fmt.Printf("%c", '0')
此打印:
0
0
在Go Playground上尝试。
答案 1 :(得分:1)
在c char'0'中始终等于数字0,请向我解释一下,否则我完全错了!
您完全错了:P。这是您代码的C等效代码。
$ cat t.c
#include <stdio.h>
int main() {
printf("%d\n",'0');
}
$ gcc -o tc t.c && ./tc
48
但是,如果您专门将 tell printf
解释为字符“ 0”,则会得到文字0
,它的二进制表示形式是十进制48。
$ cat t.c
#include <stdio.h>
int main() {
printf("%d %c %c\n", '0', '0', 48);
}
$ gcc -o tc t.c && ./tc
48 0 0