(3)风色从零单排《C++ Primer》 重要的基本类型

从零单排《C++ Primer》

——(3)重要的基本类型

算数类型(Arithmetic Types)c++算数类型

TypeMeaningMinimum Size

wchar_t用来保证有足够的大小去保存扩展字符集。char16_t和char32_t用语Unicode 字符集。

一般而言,short类型为半个机器字(word)长,int类型为一个机器字长,而long类型为一个或两个机器字长(在32位机器中,long类型和int类型的字长通常是相同的)。

一般而言,float类型为一个机器子长,double类型为两个机器子长。long double类型为三或四个机器字长。float能表示7位有效数字,double能表示16位有效数字。

除了bool和extended character types(wchar_t)的intergral type(int,short,long,long long)可以是有符号的和无符号的。用unsigned 类型 表示无符号。例如unsigned int。

类型使用建议:

1)如果值不能是负的,使用无符号类型。

2)使用int或long long(如果超过了int 表示的范围)来进行整形计算。

3) 不要使用plain char 或者 bool来进行算数运算。只用它们来保存值。用位根据不同的编译器,plain char可能是有符号的或无符号的。char有三种(plain) char,signed char,unsigned char。

4)一般而言,使用Double来进行浮点数计算。

问:

int,long,long long,short有什么不同?unsigned,signed有什么不同?float和double有什么不同?

答:

short类型为半个机器字(word)长,int类型为一个机器字长,而long类型为一个或两个机器字长(在32位机器中,long类型和int类型的字长通常是相同的)。

unsigned为无符号数,signed为有符号数。表示范围不同。

float类型为一个机器子长,double类型为两个机器子长。表示的有效数据为不同。float为6位,double为10位。

问:

为了计算货代支付,利息,本金和支付金额你会用什么类型?

答:使用Double。

赋值时的类型转换

bool b = 42; // b is true

int i = b; // i has value 1

i = 3.14; // i has value 3

double pi = i; // pi has value 3.0

unsigned char c = -1; //assunming 8-bit chars,c has value 255

signed char c2 = 256; //assuming 8-bit chars,the value of c2 is undefined

1)当给bool赋值时,如果为赋值为0,bool为flase,否则位true。

2)把bool赋值给其他算数类型时,true为1,false为0。

3)当把浮点型赋值给integral类型时,保存的是小数点前面的部分。

4)如果把integral类型部分赋值给浮点类型,分数部分是0。

6)当我们给带符号类型赋一个超出它表示范围的值时,结果是未定义的。

无符号类型运算

当使用unsigned和int进行算数运算的时候,int会自动转为unsigned。

unsigned u = 10;int i = -42;std::cout<<i + i <<std::endl;//prints -84std::cout<<u + i <<std::endl;//if 32-bit,prints 4294967264

无论是一个还是两个无符号数,相减时要保证结果大于0。

unsigned = 42, u= 10;std::cout<<u1 – u2 <<std::endl;//ok result is 32std::cout<<u2 – 21 <<std::endl; // ok but the result will wrap around//WRONG:u can never be less than 0;for(unsigned u = 10; u>=0; –u)std::cout<< u << std::endl;因此,最好不要把无符号数和有符号数混用。

作业:p38

Exercise 2.3:#include<iostream>int main(){unsigned u = 10, u2 = 42;std::cout<<u2 – u <<std::endl; //32std::cout<<u – u2 <<std::endl; //<span style="font-family: Arial, Helvetica, sans-serif;">4294967264</span>int i = 10, i2 = 42;std::cout<< i2 – i <<std::endl; //32std::cout<< i – i2<<std::endl; //-32std::cout<< i – u <<std::endl; //0std::cout << u – i<<std::endl; //0return 0;}字面值

如42,它就是字面值,每个字面值都有一个类型。

integer 和 浮点型字面值

integer:

可以使用十进制,八进制,十六进制表示。

20/* decimal */024 /* octal*/0x14 /* hexadecimal */浮点型:3.14159 3.14159E0 0. 0e0 .001字符和字符串字面值:'a' //字符字面值"Hello World!" 字符串字面值编译器会在每个字符串字面值的后面追加一个null字符(’\0′)。

字符串可以如下连接:

转义字符:

1)

newline \n horizontal tab \t alert(bell) \a vertical tab \v backspace \b double quote \&;

backslash \\ question mark \? single quote \’ carriage return r formfeed f

2)

数字表示形式

12(newline) 40 (blank) x4d(‘M’)

后面跟着最多3个8进制数字,否则将被拆分。如1234 会分成123和4

字面值类型可以覆盖

Character and Character String Literals

Integer Literals

SuffixMinimum Type

u or Uunsigned

l or Llong

ll or LLlong long

Floating-Point Literals

SuffixType

f or Ffloat

l or Llong double

Bool 字面值

true,false

,当你能梦的时候就不要放弃梦

(3)风色从零单排《C++ Primer》 重要的基本类型

相关文章:

你感兴趣的文章:

标签云: