字符“ 0”不等于整数0?

时间:2019-12-28 16:25:11

标签: go

package main

import "fmt"
func  main() {
   fmt.Println(byte('0'))

}

为什么在Mac上运行此代码并显示 48 而不是 0
在c char'0'中始终等于数字0,请向我解释一下,否则我完全错了!

2 个答案:

答案 0 :(得分:3)

这是fmt软件包的工作方式。 fmt.Println()的参数将使用 default 格式,其中%d用于整数值(例如byteint等,甚至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上尝试。

查看相关内容:Equivalent of python's ord(), chr() in go?

答案 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