Ada 中的缩小范围变量中的位是如何排列的?
How are bits arranged in a reduced-range variable in Ada?
假设我在 Ada 中创建了一个类型:
type Coord_Type is range -32 .. 31;
我希望这些位在内存中看起来像什么,或者特别是在将此值传输到另一个系统时?
我可以想到两个选项。
一个是"Coord_Type"的所有变量都使用全(默认整数?)space,但只有范围内的值是可能的。如果我假设 2s 补码,那么值 25 和 -25 是可能的,但不是 50 或 -50:
0000 0000 0001 1001 ( 25)
1111 1111 1110 0111 (-25)
0000 0010 0011 0010 ( 50) X Not allowed
1111 1111 1100 1110 (-50) X Not allowed
另一种选择是 space 只压缩到需要的部分。 (我选择了一个字节,但可能只有 6 位?)所以根据上面的值,这些位可能会这样排列:
0000 0000 0001 1001 ( 25)
0000 0000 1110 0111 (-25)
0000 0000 0011 0010 ( 50) X Not allowed
0000 0000 1100 1110 (-50) X Not allowed
从本质上讲,Ada 是否会进一步影响值的存储,而不仅仅是限制变量中允许的范围 space?这个问题,字节序,2s补码是不是连Ada都控制了?
当你像这样声明类型时,你就让编译器为每个体系结构选择最佳布局。在某些架构上,您甚至可能获得二进制编码的十进制 (BCD) 而不是二进制补码。
假设我在 Ada 中创建了一个类型:
type Coord_Type is range -32 .. 31;
我希望这些位在内存中看起来像什么,或者特别是在将此值传输到另一个系统时?
我可以想到两个选项。
一个是"Coord_Type"的所有变量都使用全(默认整数?)space,但只有范围内的值是可能的。如果我假设 2s 补码,那么值 25 和 -25 是可能的,但不是 50 或 -50:
0000 0000 0001 1001 ( 25)
1111 1111 1110 0111 (-25)
0000 0010 0011 0010 ( 50) X Not allowed
1111 1111 1100 1110 (-50) X Not allowed
另一种选择是 space 只压缩到需要的部分。 (我选择了一个字节,但可能只有 6 位?)所以根据上面的值,这些位可能会这样排列:
0000 0000 0001 1001 ( 25)
0000 0000 1110 0111 (-25)
0000 0000 0011 0010 ( 50) X Not allowed
0000 0000 1100 1110 (-50) X Not allowed
从本质上讲,Ada 是否会进一步影响值的存储,而不仅仅是限制变量中允许的范围 space?这个问题,字节序,2s补码是不是连Ada都控制了?
当你像这样声明类型时,你就让编译器为每个体系结构选择最佳布局。在某些架构上,您甚至可能获得二进制编码的十进制 (BCD) 而不是二进制补码。