您的位置:首页 > 编程语言 > C语言/C++

C++:数据类型

2015-09-21 19:54 375 查看

数据类型的存储

数据类型在机器级是以位存储数据的。然而在位这一级上,存储器是没有结构和意义的。

让存储具有结构的最基本方法是用块(chunk)处理存储。大部分计算机

都使用特定位数的块来处理存储,块的位数一般是 2 的幂,因为这样可以一次处理 8、16 或 32 位。

虽然确切的大小因机器不同而不同,但是通常将 8 位的块作为一个字节,32 位或 4 个字节作为一个“字(word)”。

大多数计算机将存储器中的每一个字节和一个称为地址的数关联起来。要让地址为 736425 的字节具有意义,必须要知道存储在该地址的值的类型。一旦知道了该地址的值的类型,就知道了表示该类型的值需要多少位和如何解释这些位。

带符号和无符号

整型 int、short 和 long 都默认为带符号型。要获得无符号型则必须指定该类型为 unsigned,比如 unsigned long。

变量赋值时溢出了怎么办?

答案取决于这种类型是 signed 还是 unsigned 的。

对于 unsigned 类型来说,编译器必须调整越界值使其满足要求。编译器会将该值对 unsigned 类型的可能取值数目求模,然后取所得值。比如 8 位的unsigned char,其取值范围从 0 到 255(包括 255)。如果赋给超出这个范围的值,那么编译器将会取该值对 256 求模后的值。

例如,如果试图将 336 存储到 8 位的 unsigned char 中,则实际赋值为 80,因为 80 是 336 对 256求模后的值。

对于 unsigned 类型来说,负数总是超出其取值范围。unsigned 类型的对象可能永远不会保存负数。有些语言中将负数赋给 unsigned 类型是非法的,但在 C++ 中这是合法的,其结果是该负数对该类型的取值个数求模后的值。所以,

如果把 -1 赋给 8 位的 unsigned char, 那么结果是 255, 因为 255 是 -1 对256 求模后的值。

当将超过取值范围的值赋给 signed 类型时,由编译器决定实际赋的值

计算时使用内置算术类型

在大多数机器上, 使用 int 类型进行整型计算不易出错。

而使用浮点运算时,使用 double 类型基本上不会有错。

什么是字面值

像42这样的值,在程序中被当作字面值常量:字面值是因为仅能用它的值称呼它,常量是因为它的值不能修改。每个字面值都有相应的类型,例如:0是int型,3.14159是double型。字面值仅存在于内置类型,没有类类型的字面值。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: