-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
12878ce
commit 7fbec99
Showing
1 changed file
with
29 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1,29 @@ | ||
# Data Types | ||
# 数据类型 | ||
|
||
Cairo中的每个值都是某种数据类型,这告诉Cairo正在指定哪种数据,以便它知道如何处理该数据。这一节涵盖了两个数据类型的子集:标量和复合数据类型。 | ||
|
||
请记住,Cairo是一种静态类型语言,这意味着在编译时必须确定所有变量的类型。编译器通常可以根据值及其用法推断出所需的类型。在许多类型可能的情况下,我们可以使用一个转换方法,其中指定所需的输出类型。例如,下面代码使用TryInto和OptionTrait trait将felt252类型转换为u32类型: | ||
|
||
use traits::TryInto; | ||
use option::OptionTrait; | ||
fn main() { | ||
let x: felt252 = 3; | ||
let y: u32 = x.try_into().unwrap(); | ||
} | ||
|
||
|
||
您将看到其他数据类型的不同类型注释。 | ||
|
||
标量数据类型 | ||
|
||
标量类型表示单个值。Cairo有三种基本标量类型:felts、整数和布尔值。您可能会从其他编程语言中认识到它们。让我们看看它们在Cairo中的工作原理。 | ||
|
||
Felt类型 | ||
|
||
在Cairo中,如果您没有指定变量或参数的类型,它的类型默认为一个位元素,表示为关键字felt252。在Cairo的上下文中,当我们说“一个位元素”时,我们意思是一个在范围0 <= x < P内的整数,其中P是一个非常大的素数,当前等于P = 2^{251} + 17 * 2^{192}+1。当执行加法、减法或乘法时,如果结果超出了指定范围的素数范围,将发生溢出,并添加或减去适当的P倍数,以将结果带回范围内(即,结果计算为模P)。 | ||
|
||
整数和字段元素之间最重要的区别是除法:字段元素的除法(因此在Cairo中的除法)与常规CPU的除法不同,其中整数除法x / y被定义为[x/y],其中返回商的整数部分(因此您获得7/3=2),并且它可能或可能不满足方程(x / y)*y == x,取决于x是否可被y整除。在Cairo中,x/y的结果被定义为始终满足方程(x / y)*y == x。如果y被作为整数划分x,您将在Cairo中得到预期结果(例如6/2确实会产生3)。但是当y不能整除x时,您可能会得到意想不到的结果。例如,由于2 * ((P+1)/2) = P+1 ≡ 1 mod[P],在Cairo中,1/2的值为(P+1)/2(而不是0或0.5),因为它满足上述方程式。 | ||
|
||
整数类型 | ||
|
||
felt252类型是一种基本类型,用作创建核心库中所有类型的基础。然而,强烈建议程序员只要可能就使用整数类型而不是felt252类型,因为整数类型带有附加的安全功能,可以提供额外的保护以防止代码中潜在的漏洞,例如溢出检查。通过使用这些整数类型,程序员可以确保他们的程序更加安全,并且不太容易受到攻击或其他安全威胁的影响。整数是没有分数部分的数字。此类型声明指示程序员可以用来存储整数的比特数。表3-1显示了Cairo中的内置整数类型。我们可以 |