数据类型位数

1.C语言常见数据类型(32位系统为例):

2.默认有符号的数据结构short,int,long的区别

上表数据结构基本都有符号型,如int,long都默认为有符号型,其具体区别主要和系统位数有关:

16位操作系统:long:4字节,int:2字节,

32位操作系统:long:4字节,int:4字节,short:2字节

64位操作系统:long:8字节,int:8字节

      int型在不同位数操作系统中所占用的字节数不同,如果想编写可移植性好的程序,早年流行16位和32位操作系统时最好用long修饰int型,现在流行32位和64位操作系统,用int就挺多了。当然这些都看你怎么去理解它了,毕竟它们在不同操作系统所占字节数不固定,所以各自都有其适用之处,不可定论其好坏。

    关于int,short,long的C语言规定:无论什么平台都要保证long型占用字节数不小于int型, int型不小于short型,而int最少16位(2字节),具体位长由编译器开发商根据各种情况自己决定。

3.数据类型char不确定范围

char的默认类型不确定有可能是unsigned,也有可能是signed,主要更具编译器而定,可以自己测试一下编译器的默认char的符号类型。

4.如何区分和使用float和double精度不同的数据类型

首先float和double的精度不同, float保留到小数点后面7位,而double保留到小数点后面16位,float能保证6 位有效数字,而double能保证15位有效数字,如果在不追求精度的的情况下,当然用 float比较好,节省内存,如果需要很高的精度的情况下,最好还是用 double,平时我们定义浮点型变量一般都用double,毕竟精度高,一般精度的损失是不能忽略的。

5.关于为什么C语言中short int 范围是-32768---32767 而不是 -(2^16-1)---32767的理解

       因为C语言中(signed) short (int) 占2个字节,有16个二进制位,共可表示2^16种状态。因为它用来表示有符号数,而0也要占用一个状态。所以,16位的原码可以表示的数是-32767~+32767(-(2^15-1)~2^15-1),它的0可以表示为二种状态,+0和-0,既浪费了存储资源,又造成了不方便(需要处理后才能判断二个整数量是否真的不相等)。所以一般采用计算机中一般都采用补码形式来表示有符号整数。多出的一个状态按补码的规则正好是-32768。

6.补充:类类型string

      由于string在c++中属于类类型,不是基本数据类型,类不能计算其在内存中所占大小,非要用sizeof(string)来算的话,一般算出来的结果是 sizeof(string)=4byte,如果string字符串内容很多,很明显就不是其真实大小,string类里面有计算其字节大小的函数如:size(),length()。

7.字节换算关系:   

字节:byte;位:bit
1GB=1024MB
1MB=1024KB
1KB=1024Byte
1Byte=8Bit

8.C/C++输出格式设置:

9.实际编程常用数据类型(固定大小的数据类型宏定义):

typedef signed char       int8_t

typedef short int             int16_t;

typedef int                      int32_t;

# if __WORDSIZE == 64
typedef long int              int64_t;
# else
__extension__
typedef long long int      int64_t;

#endif

其中,可以使用intptr_t来保证平台的通用性,它在不同的平台上编译时长度不同,但都是标准的平台长度,比如64位机器它的长度就是8字节,32位机器它的长度是4字节,定义如下:

#if __WORDSIZE == 64
typedef long int                intptr_t;
#else
typedef int                        intptr_t;
#endif
编程中要尽量使用sizeof来计算数据类型的大小,以上类型定义都有相应的无符号类型。

 

 

  • 8
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值