a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 104|回复: 0

[软件设计师] 2012年软件水平考试软件设计师课后辅导(8)

[复制链接]
发表于 2012-8-2 09:08:23 | 显示全部楼层 |阅读模式
很多人对C/C++中的整型不太了解,导致代码移植的时候出现问题,本人在此总结一下,若有描述错误,请务必指出,谢谢!    a. C/C++对整型长度的规定是为了执行效率,将int定义为机器字长可以取得最大的执行速度;
) q1 C& i! \8 Y, \' o( Q   b. C/C++中整型包括:int, char 和 enum, C++中还包含bool类型,C99中bool是一个宏,实际为_Bool; 0 h" l% g' K5 f
   c. C 和 C++ 对 enum 的规定有所不同,这里不描述;
. N. O. N' |+ [- y8 q* |4 f   d. 修饰整型正负的有 signed 和 unsigned,对于 int 默认为 signed;
1 X1 k9 u  R+ v  k  S4 t  q/ C   e. 修饰 int 大小的有 short 和 long, 部分编译器还扩展了一些更长的整型,比如 long long 和 __int64, C99中增加了long long和unsigned long long; & B: d8 ?4 V1 @1 S/ `7 p! K
   f. int 的长度 与 机器字长相同, 16位的编译器上int长16位,32位的编译器上int长32位;
/ S0 `3 C8 ^+ T: b9 B  d2 W+ ^   g. short int 的长度 小于等于 int 的长度,注重她们可能长度相等,这取决于编译器;
& u- \9 W9 ?' Q3 l   h. long int 的长度 大于等于 int 的长度,注重她们可能长度相等,这取决于编译器; 8 l5 _9 E/ q9 e, ~6 G
   i. char 的长度应当可以包容得下一个字符,大部分系统中就是一个字节,而有的系统中可能是4个字节,因为这些系统中一个字符需要四个字节来描述; 4 i7 d9 ~" b6 p" V' B! x
   j. char 的正负取决于编译器,而编译器的决定取决于操作系统,在不同的编译器中char可能等同于signed char,也可能等同于unsigned char;
7 q2 q* H% v4 m# Y6 M+ ^2 s; q/ b  总结: 0 \' t  c! ?% @0 p) c8 r
   a. 出于效率考虑,应该尽量使用int和unsigned int; 5 r. ]7 F0 e5 ?  ~3 J0 v
   b. 当需要指定容量的整型时,不应该直接使用short、int、long等,因为在不同的编译器上她们的容量不相同。此时应该定义她们相应的宏或类型,比如在VC++6.0中,可以如下定义:
" ?/ H- D* N$ u$ H) {   typedef unsigned char UBYTE; # ^) P5 n( |0 M; e: d0 [0 m# j
   typedef signed char SBYTE; $ a5 n* U, @) Y  h6 K) a8 `
   typedef unsigned short int UWord; 2 }# P7 X) ^& k7 \
   typedef signed short int SWORD; / t" ~" t. R" n; q
   typedef unsigned int UDWORD; / s9 H: L) e. D
   typedef signed int SDWORD;
4 }' ?  T2 |+ G9 g0 O: m" o   typedef unsigned __int64 UQWORD;
( _- u/ g# X. W& m7 z   typedef signed __int64 SQWORD; / N$ D8 Y1 X' K2 J; \
  然后在代码中使用 UBYTE、SBYTE、UWORD 等,这样当代码移植的时候只需要修改相应的类型即可。
, K6 N3 ]7 F. P  A* P  定义自己的类型虽然在代码移植的时候只需要修改一处即可,但仍然属于源代码级别的修改,所以 C++ 2.0 中将这些类型定义在模板中,可以做到代码移植时无需修改代码。 2 H/ v3 b! e, W/ C  Y( X; X
   c. 在定义char时,一定要加上 signed 或 unsigned,因为她的正负在不同的编译器上并不相同。 ) n) t. L& F! F3 f! T" j
   d. 不要想当然的以为char是1字节长,因为她的长度在不同的编译器上并不相同。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-7 21:33 , Processed in 0.244429 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表