布尔数据的内存占用,算数数据类型/类型转换

布尔类型数据
在计算机中,0和1即可表示真假,但计算机中的最小储存单元是8位即一个字节,所以可以说布尔数据只用八分之一字节既可,但实际上它占用了一个字节。

算术数据类型

-short 至少16位;
- int 至少和short一样长;
- long 至少32位,且至少和int一样长;
- long long 至少64位,且至少和long一样长

类型标识符 32位机器所占字节长度 64位机器所占字节长度 格式化输出
int 4 4 %d
short 2 2 %d
long 4 8 %ld
long long 8 8 %lld
unsinged 4 4 %u
unsinged short 2 2 %u
unsiged long 4 8 %lu
unsigned long long 8 8 %llu

对于不同位的操作系统,整形数据的长度是可变的,为了跟好的向低位兼容,c++才这样定义。
使用规则:
1. int为计算机处理效率最高的长度。如果没有非常说服力的理由来选择其他类型,则应使用int。
2. 如果变量的值不可能为负数,则可以使用无符号类型。
3. 如果知道变量可能表示的整数值大于16位,则应使用long,即使系统上的int类型为32位,也应该这样做,这样程序在移值到16位的系统上时,就不会突然无法正常工作。
4. 如果要存储的值超过20亿,可以使用long long。
5. 如果short比int小,则可以使用short来节省内存,通常,仅当有大型整型数组时,才有必要使用short。如果节省内存很重要,则应使用short而不是使用int,即使它们的长度是一样的。

6,使用int执行整数运算。实际应用中,short常常显得太小而long一般和int有一样的的尺寸,如果数值超过int的取值范围选用longlong

7,算术表达式中不要使用char或者bool,只有在在存放字符或者布尔值时才使用它们,因为char在一些机器上是有符号的而在另一些机器上又是没有符号的
所以使用char进行运算容易出现问题,如果需要一个不大的整数应该明确指定它的类型是signed char 或者 unsigned char
8,执行浮点型运算选用double,这是因为float通常精度不够而且双精度浮点和单精度浮点数计算代价相差无几,事实上对于某些机器双精度运算甚至比单精度还要快,long double提供的精度
一般情况是没有必要的。

数据类型转换

 

当我们把一个非布尔类型的算数值赋给布尔型数据,初始值为0则结果为false,否则为true

 

当我们把一个布尔值付给非布尔类型时,初始值false则结果为0,初始值为true则结果为1

 

当我们付给无符号类型数据一个超出他们表示范围外的数值时,结果是初始值对无符号型表示数值总数取模后的余数

 

当我们赋值给一个超出她表示范围的值时。结果是未定义的,此时程序可能继续工作崩溃,也有可能会产生垃圾数据。

 

#不宜在算术表达式中用布尔值,因为它的值非0 即1.

int i=42;
if (i)//非0即为1
i=0;

 

 

#当一个算术表达式中既有无符号数又有int数值时,那个int数值就会转换成无符号的数

usigned u =10;
int i=-42;
std:: cout<<i+i<<std::endl; //输出-84
std:: cout<<u+i<<std::endl;
//如果int占32位,那么则输出4294967264

 

 

 

 
posted @ 2020-09-06 20:16  SoberJoker  阅读(496)  评论(0)    收藏  举报