我正在努力学习Ada,但是资源很难.我一直在阅读这个主题,但所有的解释都让我难以理解.我经常看到这样的代码
type Stream_Element is mod 2 ** Standard'Storage_Unit;
Run Code Online (Sandbox Code Playgroud)
这是做什么的?我在这里找到了一个解释:
Ada还允许您定义模块类型.这些类型是无符号的,具有"环绕"语义.超出普通类型末尾的增量会导致异常,但是超出模块类型末尾的增量会回绕到零.此外,运算符not,and,和,xor可用于模块化类型以进行按位操作.图11演示了.
这种解释是有道理的,但我不理解代码.请问什么signifigance mod 2 ** X有哪些?这是mod为了什么?这是**做什么的?
ajb*_*ajb 16
**是指数运算符.也就是说,A**B装置A 乙.
mod在这种情况下,只是用来告诉它你定义模块类型的语法.在这种情况下,这意味着这是一个整数类型,其值范围从0到2 Standard'Storage_Unit- 1. Standard'Storage_Unit不是由语言定义,而是由您正在使用的Ada编译器定义(该语言允许编译器定义自己的属性); 我相信它是平等的System.Storage_Unit.这是一个常量,用于定义可寻址存储单元中的位数.对于绝大多数处理器,此常量为8(因为每个地址寻址一个8位字节),但也有例外.
所以这样做是定义一个整数类型,其值范围从0到255(在大多数处理器上),即适合一个字节的整数.因为它是"模块化的",这也意味着类型上的算术运算环绕(即如果你添加130 + 130,你将获得4,并且Constraint_Error不会被提升).模块化的类型也有位运算符and,or以及xor为它们定义.