网站电脑基础培训班,怎么给网站制作二维码,东莞推广优化关键词优化,网站系统jsp模板我的Go语言初体验——#xff08;6#xff09;整型有理数数据类型
“我的Go语言初体验” | 征文活动进行中… Go 语言使用后缀 ‘r’ 表示有理数#xff0c;支持整型、分数型、浮点型三种有理数数据类型#xff08;Rational number#xff09;。 在整型有理数变量声明时语言初体验——6整型有理数数据类型
“我的Go语言初体验” | 征文活动进行中… Go 语言使用后缀 ‘r’ 表示有理数支持整型、分数型、浮点型三种有理数数据类型Rational number。 在整型有理数变量声明时可以同时对变量赋值如果对整型有理数变量只声明而没有赋值其初始值不是 0而是 nil。 整型有理数的基本运算如加减乘除与通常的整数运算相同按照先乘除、后加减的顺序进行运算。 整型有理数变量可以与整型有理数类型的常数、分数形式的有理数类型的常数和整型常数进行运算不能与浮点数类型的常数进行运算。 整型有理数变量可以与整型变量进行运算运算结果为整型有理数。不允许对整型有理数与浮点型变量进行运算。 1. 有理数数据类型
在数学上数字分为实数和复数实数分为有理数和无理数。有理数是整数和分数的集合整数可以表示为分母为 1 的分数因此可以用分数来表示任意的有理数。
在计算机语言中数据类型是数据的一种属性类型系统提供了各种数据类型的定义、实现和使用方法。大多数编程语言支持数字的数据类型有无符号整数、有符号整数、浮点数和复数类型有些类型还可以进一步分为不同的位数如 8位、16位、32位和64位。但是现有计算机语言中几乎都没有提供有理数数据类型一些计算机语言允许用户定义有理数数据结构。
Go 语言除了这些常用的数字类型之外还支持有理数Rational number数据类型。
Go 语言中使用后缀 ‘r’ 表示有理数支持整型、分数型、浮点型三种有理数数据类型 **bigint整型有理数。**支持 64位以上的大整数例如 “1r65” 的值等于 2 的 65 次幂“1r65 - 100” 的值等于 2 的 65 次幂减去 100 的结果。 **bigrat分数型有理数。**支持分数形式表示的有理数例如 “4/5r” 的值等于分数 4/5。 bigfloat浮点型有理数0支持浮点数形式表示的有理数。 2. 整型有理数的变量声明与赋值
2.1 变量声明与赋值
Go 语言使用 var 关键字声明变量整型有理数的变量声明方法如下 var varname bigint // 声明变量 varname 为 bigint 类型 【例程 1】变量声明
// Example 1: declaration and assignment of bigint type variables
import reflect
var bint1 bigint 1r 100
var bint2 bigintprintln reflect.TypeOf(bint1), , bint1 : , bint1
println reflect.TypeOf(bint2), , bint2 : , bint2/* Running results
builtin.Gop_bigint , bint1 : 1267650600228229401496703205376
builtin.Gop_bigint , bint2 : nil
*/程序说明
1在整型有理数变量 bint1 声明时可以同时对变量 bint1 赋值。“1r 100” 的值等于 2 的 100 次幂。 2对整型有理数变量 bint2 只声明而没有赋值其初始值不是 0而是 “nil”。 2.2 不指定变量类型
Go 语言允许不通过 var 声明变量在不指定变量类型而直接对变量进行初始化并赋值编译器将自动推导变量类型。但需要注意的是如果初始化的数值没有后缀 ‘r’系统将优先将其识别为整型变量 int。
【例程 2】变量初始化时不指定类型
// Example 2: variable initialization without specified type
import reflect
bint3 : 306
bint4 : 306r
bint5 : 9223372036854775807
bint6 : 9223372036854775808r
//bint6 : 9223372036854775808 // constant 9223372036854775808 overflows intprintln reflect.TypeOf(bint3), , bint3 : , bint3
println reflect.TypeOf(bint4), , bint4 : , bint4
println reflect.TypeOf(bint5), , bint5 : , bint5
println reflect.TypeOf(bint6), , bint6 : , bint6/* Running results
int , bint3 : 306
builtin.Gop_bigint , bint4 : 306
int , bint5 : 9223372036854775807
builtin.Gop_bigint , bint6 : 9223372036854775808
*/程序说明
1Go 语言中的整型变量 int64 的取值范围是-9223372036854775808 ~ 9223372036854775807。在此范围内的整数带有后缀 ‘r’ 则被识别为整型有理数变量不带后缀 ‘r’ 则被识别为整型变量 int。 2在初始化变量时如果赋值的数值不带后缀 ‘r’编译器识别变量为整型变量 int如 bint3, bint5。 3在初始化变量时如果赋值的数值带有后缀 ‘r’识别变量为整型有理数变量 bigint如 bint4, bint6。 4但是超出 int64 取值范围的大整数如9223372036854775808如果不带后缀 ‘r’ 就会报错。 2.3 用表达式对变量赋值
【例程 3】使用表达式对整型有理数变量赋值
// Example 3: assigning values to variables using expressions
// bigint type, is allowed to define large integers bigger than int64
var bint7 bigint 1r 65 // the value is equal to the 65th power of 2
var bint8 bigint 1r65 - 100 // expression is allowed in definition
var bint9 bigint -3r36 200 // define a negative integer rational
var bint10 bigint 0 // 0 is allowed as a integer rationalprintln bint7 1r 65: , bint7
println bint8 1r65 - 100: , bint8
println bint9 -3r36 200: , bint9
println bint10 0: , bint10/* Running results
bint7 1r 65: 36893488147419103232
bint8 1r65 - 100: 36893488147419103132
bint9 -3r36 200: -206158430008
bint10 0: 0
*/程序说明
1可以用表达式对整型有理数变量进行赋值表达式可以混合使用带有后缀 ‘r’ 的整型有理数常数和不带后缀 ‘r’ 的整型常数。 2“1r65” 的值等于 2 的 65 次幂“1r65 - 100” 的值等于 2 的 65 次幂减去 100 的结果-3r36 200 的值等于 2 的 65 次幂乘以 -3后加 200 的结果。 3正整数、负整数和零都可以被赋值给整型有理数变量。 3. 整型有理数的运算
3.1 整型有理数的基本运算
整型有理数的基本运算如加减乘除其计算方法和规则与通常的整数运算相同。
【例程 4】整型有理数的基本运算
// Example 4: Basic operations of integer rational numbers
var bint1 bigint 1r 65
var bint2 bigint 1r36 100
var bint3 bigint 9223372036854775808r
var bint4 bigint 306rprintln bint1 bint2 , bint1bint2
println bint1 - bint2 , bint1-bint2
println bint1 * bint2 , bint1*bint2
println bint1 / bint2 , bint1/bint2// The operation rule is multiplication and division before addition and subtraction.
println bint1 bint2 / bint3 , bint1bint2/bint3
println (bint1 bint2) / bint3 , (bint1bint2)/bint3
println bint1 (bint2 / bint3) , bint1(bint2/bint3)/* Running results
bint1 bint2 36893488216138580068
bint1 - bint2 36893488078699626396
bint1 * bint2 2535301204145807617735316733952
bint1 / bint2 536870911
bint1 bint2 / bint3 36893488147419103232
(bint1 bint2) / bint3 4
bint1 (bint2 / bint3) 36893488147419103232
*/程序说明
1整型有理数的基本运算如加减乘除其计算方法和规则与通常的整数运算相同。 2整型有理数的基本运算按照先乘除、后加减的顺序进行运算。 3整型有理数表达式的运算结果如果不是整数则对运算结果自动取整。 3.2 整型有理数与常数的运算
整型有理数变量可以与整型有理数类型的常数进行加减乘除运算也可以与整型常数进行运算。
【例程 5】整型有理数与整型常数的运算
// Example 5: Basic operations with constants of integer (rational) type
var bint1 bigint 1r 65
var bint2 bigint 1r36 100
var bint3 bigint 9223372036854775808r
var bint4 bigint 306r// The operations with constants of integer rational type
println bint1 1r60 , bint11r60
println bint2 - 1r36 , bint2-1r36
println bint3 * 306r , bint3*306r
println bint3 / 306r , bint3/306r// The operations with constants of integer type
println bint1 160 , bint1160
println bint2 - 160 , bint1-160
println bint3 * 306 , bint3*306
println bint3 / 3014 , bint3/3014// The operations with constants of rational number in fractional form
println bint1 160/1r , bint1160/1r
println bint2 - 160/5r , bint1-160/5r
println bint3 * 305/306r , bint3*305/306r
println bint3 / 5/100r , bint3/5/100rprintln bint4 * 0 , bint4*0
println bint4 / 0 , bint4/0 // panic: division by zero/* Running results
bint1 1r60 38046409652025950208
bint2 - 1r36 100
bint3 * 306r 2822351843277561397248
bint3 / 306r 30141738682531947bint1 160 36893488147419103392
bint2 - 160 36893488147419103072
bint3 * 306 2822351843277561397248
bint3 / 3014 3060176521849627bint1 160/1r 36893488147419103392
bint2 - 160/5r 36893488147419103200
bint3 * 305/306r 9193230298172243860
bint3 / 5/100r 18446744073709551bint4 * 0 0
panic: division by zero
*/程序说明
1整型有理数变量可以与整型有理数类型的常数进行加减乘除运算也可以与整型常数进行运算。 2整型有理数变量可以与分数型有理数类型的常数进行运算运算结果转换为整型有理数。 3整型有理数变量运算被 0 除时将发生错误系统提示为“panic: division by zero”。 一般地整型有理数不能与浮点数类型的常数进行加减乘除运算。
【例程 6】整型有理数与浮点数的运算
// Example 6: Basic operations with constants of float type
var bint1 bigint 1r 65// The operations with constants of float type
println bint1 160.0 , bint1160.0
println bint1 - 160.0 , bint1-160.0
println bint1 * 306.0 , bint1*306.0
println bint1 / 3014.0 , bint1/3014.0//println bint1 160.5 , bint1160.5 // invalid operation
//println bint1 - 160.5 , bint1-160.5 // invalid operation
//println bint1 * 306.5 , bint1*306.5 // invalid operation
//println bint1 / 3014.5 , bint1/3014.5 // // invalid operation/* Running results
bint1 160.0 36893488147419103392
bint1 - 160.0 36893488147419103072
bint1 * 306.0 11289407373110245588992
bint1 / 3014.0 12240706087398508
*/程序说明
1在第一组加减乘除运算中算式中浮点数常数的数值都是整数可以转换为整型常数因此运算可以执行运算结果也是正确的。
2在第二组加减乘除运算中算式中浮点数常数的数值不是整数不能自动转换为整型常数这些运算都不能执行系统提示为 “无效操作” invalid operation: mismatched types github.com/goplus/gop/builtin.Gop_bigint and untyped float 这表明**Go 语言中不允许对整型自然数与浮点型常数进行运算。**虽然第一组运算可以进行但我们也应该避免对整型自然数与浮点型常数进行运算。 3.3 整型有理数与变量的运算
Go 语言中整型有理数变量可以与整型变量进行运算运算结果为整型有理数。不允许对整型有理数与浮点型变量进行运算。
【例程 7】整型有理数与整型变量的运算
// Example 7: Basic operations with integer variables
import reflect
var bint1 bigint 1r 36
var x int 306println bint1 x*5 , bint1x*5 // bint1 x*5 68719478266
println bint1 - x/2 , bint1-x/2 // bint1 - x/2 68719476583
println bint1 * x , bint1*x // bint1 * x 21028159881216
println bint1 / x , bint1/x // bint1 / x 224573453
println bint1 / (x*x) , bint1/(x*x) // bint1 / (x*x) 733900println reflect.TypeOf(bint1x*5) // builtin.Gop_bigint
println reflect.TypeOf(bint1/(x*x)) // builtin.Gop_bigint【例程 8】整型有理数与浮点数的运算
// Example 8: Basic operations with float variables
var bint1 bigint 1r 36
var y float64 36println bint4 y , bint1y //invalid operation4. 总结 Go 语言使用后缀 ‘r’ 表示有理数支持整型、分数型、浮点型三种有理数数据类型Rational number。 在整型有理数变量声明时可以同时对变量赋值如果对整型有理数变量只声明而没有赋值其初始值不是 0而是 “”。 整型有理数的基本运算如加减乘除其计算方法和规则与通常的整数运算相同按照先乘除、后加减的顺序进行运算。 整型有理数变量可以与整型有理数类型的常数、分数形式的有理数类型的常数和整型常数进行运算不能与浮点数类型的常数进行运算。 整型有理数变量可以与整型变量进行运算运算结果为整型有理数。不允许对整型有理数与浮点型变量进行运算。 【本节完】 版权声明
原创作品转载必须标注原文链接(https://blog.csdn.net/youcans/article/details/121755262)
Copyright 2021 youcans, XUPT
Crated2021-12-06 欢迎关注『我的Go语言初体验』系列持续更新中… 我的Go语言初体验——1超详细安装教程 我的Go语言初体验——2 IDE 详细安装教程 我的Go语言初体验——3Go 数据类型 我的Go语言初体验——4零基础学习 Go 爬虫 我的Go语言初体验——5Go 基本语法之 Switch 我的Go语言初体验——6整型有理数数据类型 “我的Go语言初体验” | 征文活动进行中…