您好,  [请登录] [QQ登录]  [支付宝登录[免费注册]

商品分类

分享到: 百度搜藏 搜狐微博 新浪微博 腾讯微博 QQ收藏 人人网 Facebook Twitter

ARM底子知识七

发布日期:2011-05-05

*************************************************************

ARM编译器支持的数据范例

************************************************************

数据范例 长度(位) 对齐特性
Char 8 1(字节对齐)
short 16 2(百字对齐)
Int 32 4(字对齐)
Long 32 4(字对齐)
Longlong 64 4(字对齐)
Float 32 4(字对齐)
Double 64 4(字对齐)
Long double 64 4(字对齐)
All pointers 32 4(字对齐)
Bool(C++ only) 32 4(字对齐)

 
 1.整数范例

  在ARM体系中,整数范例因此2的补码情势存储的。对付long long范例来说,在little endian内存模式下,其低32位生存在低地点的字单位中,高32为生存在高地点的字单位中;在big endian模式下,其低32位生存在高地点的字单位中,高32为生存在低地点的字单位中。对付整型数据的操纵服从下面的规矩:

   **全部带标记的整型书的运算是根据二进制的补码举行的。 
   **带标记的整型数的运算不举行标记的扩展。 
   **带标记的整型数的右移操纵是算数移位。 
   **订定的移位位数的数是8位的无标记数。 
   **举行移位操纵的数被作为32位数。 
   **高出31位的逻辑左移的结果为0。 
   **对付无标记数和有标记的正数来说,高出32位的右移操纵结果为0;对付有标记的负数来说,高出32位的右移操纵结果为-1。 
   **整数除法运算的余数和除数有雷同的标记。 
   **当把一个整数截断成位数更短的整数范例的数时,并不克不及包管所得到的结果的最高位的标记位的精确性。 
   **整型数据之间的范例转换不会孕育产生非常停止。 
   **整型数据的溢出不会孕育产生非常停止。 
   **整型数据除以0将会孕育产生非常停止。

 
 2.浮点数

  在ARM体系中,浮点数是根据IEEE标准存储的。 

   **float范例的数是根据IEEE的单精度数表现的。 
   **double和long double 是用IEEE的双精度数表现的。

  对付浮点数的操纵服从下面的规矩: 

   **服从正常的IEEE754规矩。 
   **当默认环境下克制浮点数运算非常停止。 
   **当产生卷绕时,用最靠近的数据来表现。

  
3.指针范例的数据

  下面的规矩实用于处数据成员指针以外的其他指针: 

   **NULL被定义为0。 
   **相邻的两个存储单位地点相差一。 
   **在指向函数的指针和指向数据的指针举行数据转换时,编译器将会孕育产生告诫信息。 
   **范例size_t被定义为unsigned int. 
   **范例ptrdiff_t被定义为signed int。 
   **两个指针范例的数据相减时,结果可以根据下面的公式得到。 
   ((int)a-(int)b)/(int)sizeof(type pointed to)

  这时,只要指针所指的东西不是pack的,其对齐特性可以或许餍足整除的请求。