Go语言:未指定类型的常量(untyped int constant)和大整数的关系
运行下面的代码:
点击查看代码
package main
import "fmt"
const (
Big = 1 << 100
)
func needFloat(x float64) float64 {
//fmt.Printf("%T", Big) // It is wrong!
return x * 0.1
}
func main() {
fmt.Println(needFloat(Big)) // 1.2676506002282295e+29
}
当我尝试print变量Big的类型时,发生了报错,如下:
./prog.go:10:19: cannot use Big (untyped int constant 1267650600228229401496703205376) as int value in argument to fmt.Printf (overflows)
理由如下:

一个方面是,将Big的值传递给任何函数都需要为其分配一个实际类型。非类型化int可以变成任何整数类型或任何浮点类型(这取决于函数参数类型)。Go中单个整数值可以具有的最大实际类型是uint64,但任何类型的规则(即fmt.Println的参数类型)都更具体。它们将没有任何其他类型信息的无类型int转换为int,在当前的CPU架构上为64位。这远远低于1<<100。

你现在可能想知道“为什么我们甚至有大的常数?”答案是,你可以在常数表达式中使用大(和类似大小的值)。这些在编译时进行评估,只有在使用了它们的值后才能得到实际的类型(粗略地说)。
所以你可以让const Small=Big>>100,这相当于const Small=1,例如可以使用该常量,因为它的值可以轻松地放入int中。
例如,在实践中出现的一个领域是计算地球表面各点之间的距离所需的计算。那里使用的大量表达式可以不断计算,这意味着与将所涉及的值分配给float64并对其进行数学运算相比,精度损失较小(因为浮点常数的精度是无限的)。
Go语言:未指定类型的常量(untyped int constant)和大整数的关系的更多相关文章
- C语言基本类型之long long int
大家都知道int在linux系统下默认是占4个字节,数值表示范围是:-2147483648~2147483647.即使是无符号unsigned int类型表示范围:0-4294967295,大约42亿 ...
- C语言求2的100次方怎么解,大整数运算
#include "stdio.h"int ai[100]; void main(){ int a,b; ai[99]=1; for(b=0;b<100;b++) for( ...
- c语言的类型、运算符与表达式
title: 2017-10-17c语言的类型.运算符与表达式 tags: c程序设计语言 grammar_cjkRuby: true --- 1.1 数据类型 char 字符型,一个字节 int 整 ...
- c语言基本数据类型(short、int、long、char、float、double)
一 C 语言包含的数据类型 short.int.long.char.float.double 这六个关键字代表C 语言里的六种基本数据类型. 在不同的系统上,这些类型占据的字节长度是不同的: 在32 ...
- C语言入门教程-(4)常量和变量
1.常量和变量的概念 程序执行过程中其值不能发生改变的量叫做常量,其值能发生改变的量叫做变量.常量可以直接使用,而变量则必须先定义后才能使用,否则编译器会报错. 2.常量和变量的命名规范 在介绍常量和 ...
- Go语言 2 变量、常量和数据类型
文章由作者马志国在博客园的原创,若转载请于明显处标记出处:http://www.cnblogs.com/mazg/ Go学习群:415660935 2.1 变量 变量是对一块内存空间的命名,程序可以通 ...
- Swift 语言附注 类型
本页包括内容: 类型注解(Type Annotation) 类型标识符(Type Identifier) 元组类型(Tuple Type) 函数类型(Function Type) 数组类型(Array ...
- C语言指针类型 强制转换
关于C语言指针类型 强制转换 引用一篇文章: C语言中,任何一个变量都必须占有一个地址,而这个地址空间内的0-1代码就是这个变量的值.不同的数据类型占有的空间大小不一,但是他们都必须有个地址,而这个 ...
- 如何用一个语句判断一个整数是不是二的整数次幂——从一道简单的面试题浅谈C语言的类型提升(type promotion)
最近招聘季,看JULY大哥的面试100题时,碰到这么一个扩展问题: 如何用一个语句判断一个整数是不是二的整数次幂?(此题在编程之美也有) easy, 2的整数次幂的二进制形式只有一个1,只要用i和i- ...
- C语言之变量与常量的介绍
一 标示符 标识符:可以理解为是变量名.名字常量表示法的常量名,但是不仅限于这两个 命名规范: 1.起名要有意义,基本要做到一看名字就知道是用来干嘛的(要求你遵守,但不会报错,希望能够养成这样的好习惯 ...
随机推荐
- ThinkPHP 6 + PHP7.4.3nts +nginx 使用mysql和oracle数据库
ThinkPHP 6 + PHP7.4.3nts +nginx 使用mysql和oracle数据库. 前言 业务需求,之前使用的php 7.3.4nts ,mysql自己写的代码,需要对接第三方系统, ...
- Java 实现线程的方式有几种方式?带有返回值的线程怎么实现?
Java 实现线程的方式有几种方式?带有返回值的线程怎么实现? 在Java线程开发中,有几种方法开启线程?假如需要得到线程返回的信息怎么办?可以实现吗?凯哥将通过源码和大家一起分享下线程怎么将返回值带 ...
- WebShell流量特征检测_中国菜刀篇
80后用菜刀,90后用蚁剑,95后用冰蝎和哥斯拉,以phpshell连接为例,本文主要是对这四款经典的webshell管理工具进行流量分析和检测. 什么是一句话木马? 1.定义 顾名思义就是执行恶意指 ...
- elementUI的select下拉框增加checkbox选择框(可全选/取消)
elementUI的select下拉框增加checkbox选择框 一.实现效果 二.实现方法 1.组件代码如下: <div> <el-select ref="select& ...
- JavaScript – Generator Function
参考 阮一峰 – Generator 函数的语法 介绍 Generator Function 是一种特别的函数, 它让函数有一种分阶段执行的能力. 一般的函数, 你调用它, 它执行所有函数内的代码, ...
- CSS – z-index
介绍 z-index 是用来设置 element 层次高低的 (当 element 重叠的时候) 参考: 4 reasons your z-index isn't working (and how t ...
- Google Analytics & Ads 学习笔记 2 (gtag 版本)
gtag 是用来取代之前的 ga 的 但其实它底层就是调用 ga 而已. 只是封装了一个上层. 1. start up script <script async src="https: ...
- uniCloud
https://doc.dcloud.net.cn/uniCloud/ 什么是uniCloud uniCloud推出了opendb,包含了大量的开源数据库模板,常见数据表无需自己设计 uniCloud ...
- Naive UI 2.38.1
https://www.naiveui.com/zh-CN/os-theme/docs/i18n 配置字体 Naive UI 可以和 vfonts 配合,你可以简单的引入 vfonts 中的字体,包含 ...
- 大模型应用开发初探 : 通用函数调用Planner
大家好,我是Edison. 上一篇,我们了解了什么是AI Agent以及如何用Semantic Kernel手搓一个AI Agent.有朋友留言说,自动函数调用对大模型有较高的要求,比如Azure O ...