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

从零单排《C++ Primer》

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

算数类型(Arithmetic Types)

c++算数类型
Type Meaning Minimum Size
bool boolean NA
char character 8 bits
wchar_t wide character 16 bits
char16_t Unicode character 16 bits
char32_t Unicode character 32 bits
short short integer 16 bits
int integer 16 bits
long long integer 32 bits
long long long integer 64 bits
float single-precision floating-point 6 significant digits
double double-precision floating-point 10 significant digits
long double extended-precision floating-point 10 significant digits

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。

5)当我们给无符号类型赋值一个超出它表示范围的数值时,结果是该值对无符号类型能够表示的数值的总数取模后的余数。例如,8比特大小的unsigned char可以表示0到255,总共256个数。因此,把-1赋值给它所得的结果是255。(实际上,-1在内存中以补码方式储存,为11111111。当它复制给无符号类型时,不作任何改变,只是根据不同的类型按不同的方法读取值。为无符号时,所有位为数值为,恰好是255)

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

无符号类型运算

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

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

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

unsigned = 42, u= 10;
std::cout<<u1 - u2 <<std::endl;//ok result is 32
std::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;  //32
	std::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; //32
	std::cout<< i - i2<<std::endl;  //-32
	std::cout<< i - u <<std::endl;  //0
	std::cout << u - i<<std::endl;  //0
	return 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
Prefix Meaning Type
u Unicode 16 character char16_t
U Unicode 32 character char32_t
L wide character wchar_t
u8 utf-8(string literals only) char
Integer Literals
Suffix Minimum Type
u or U unsigned
l or L long
ll or LL long long
Floating-Point Literals
Suffix Type
f or F float
l or L  long double

Bool 字面值

true,false

时间: 2024-10-30 09:56:02

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

从零单排c++ primer(17)

(1)假设一个名字在派生类的作用域内无法正确解析,则编译器将继续在外层的基类作用域中寻找该名字的定义. (2)派生类的成员将隐藏同名的基类成员. (3)除了覆盖继承而来的虚函数之外,派生类最好不要重用其它定义在基类中的名字. (4)声明在内层作用域的函数并不会重载声明在外层作用域的函数.定义在派生类中的函数也不会重载其基类中的成员. (5)基类函数的每一个实例在派生类中都必须是可訪问.对派生类没有又一次定义的重载版本号的訪问实际上是对using声明点的訪问. (6)继承关系对基类拷贝控制最直接的

(1)风色从零单排《C++ Primer》 一个简单的c++程序

从零单排<C++ Primer> --(1)一个简单的c++程序 本次学习收获 0.写在前面 风色以前上过C++的课程,然而当时并没有认真去学,基本不能使用c++来作项目开发. 这次又一次学习c++,首先会阅读c++Prime英文版第五版,希望能够为以后的学习打下坚实的基础. 1.程序 一个简单的c++程序(P17),帮助我们高速了解c++的代码风格,并通过分析代码学习c++ 程序意图:在终端上输入一组数字.输出不同数字输出的次数.同样的数字必须是连续的. 如果输入: 42 42 42 42

(4)风色从零单排《C++ Primer》 变量,引用,指针

从零单排<C++ Primer> --(4)变量,引用,指针   变量的初始化 所谓变量的初始化,指在创建变量的同时给予值. 初始化方法: int units_sold = 0; int units_sold = {0}; int units_sold{0}; int units_sold{0}; long double ld = 3.1415926536: int a{ld}, b = {ld}; //error:narrowing conversion required int c(ld)

PAT从零单排

偶然原因开始了PAT之旅前前后后用了3天时间刷完了PAT Basic(35题) 现在记录下从零单排的过程,总的来说题目很简单 当然有个别题目的坑点还是比较给力的,准确的说,题目的数据很给力 1001. 害死人不偿命的(3n+1)猜想 (15) 纯模拟题,是偶数除以2,奇数(3n+1)除以2,到1结束 #include <cstdio> #include <cstring> #include <algorithm> using namespace std; int n,

Unity3D游戏开发从零单排(六) - 人物运动及攻击连击

提要 今天要实现的是一个简单人物控制器.包括用w,a,s,d来控制人物上下左右跑动,鼠标左击发出连招,都是基于老的lagacy的动画.虽然unity3d自带有charactorcontroller,但是并不是很好用,所以人物控制相关的全部自己来实现.先上效果图: 场景搭建 首先下载这个package,里面包含了人物的动作还有地面的模型.将人物和地面都拖进场景中.这里的模型默认的动画模式是lagacy,不用修改.模型有点偏小,改变模型的scale值为10.最好不要改源文件的scale的scale

PHP从零单排(十八)图片处理

1.打开已经存在的图片 <?php header("Content-type:image/jpeg"); $img=imagecreatefromjpeg("cc.jpg"); imagejpeg($img); imagedestroy($img); ?> 函数imagecreatefromjpeg()的参数即文件所在路径,返回值是参数所指图片的资源标识符.该函数时通过已有图像新建一个图像,并不是单纯打开原图像本身.如果将图片的后缀名.jpg强制改为.p

从零单排入门机器学习:Octave/matlab的常用知识之矩阵和向量

Octave/matlab的常用知识之矩阵和向量 之前一段时间在coursera看了Andrew ng的机器学习的课程,感觉还不错,算是入门了.这次打算以该课程的作业为主线,对机器学习基本知识做一下总结.小弟才学疏浅,如有错误,敬请指导. Andrew的课程选了Octave/matlab为编程语言.他选择这个估计更多是考虑大众性,这门语言容易入门. 然后我觉得学会使用Octave/matlab还是挺有用的.一来是她天生是个数学工具,开始的研究阶段使用她最方便莫属,注意我这里所说的是研究阶段,商用

Unity3D游戏开发从零单排(五) - 导入CS模型到Unity3D

游戏动画基础 Animation组件 Animation组件是对于老的动画系统来说的. 老的动画形同对应的动画就是clip,每个运动都是一段单独的动画,使用Play()或CrossFade(),直接播放动画 或淡入淡出播放动画. animation.Play("name"); animation.CrossFade("name"); 下面的是它的几个属性 Animation:默认的动画片段: Aniamtions:包含的动画片段: Play Automaticall

php从零单排-00

php是什么? php是一种服务器端的语言,用来产生动态网页 我为什么要学习php? 作为半路出家程序员,对web的了解几乎为零,php简单易学,资料齐全,能够减轻web学习的畏惧感. web的外延很广,可以接触到更多的领域,能拓展视野,并帮助自己找到自己喜爱并擅长的领域. 能做点小项目,锻炼之余挣点外块,补充一下自己的钱包. 准备怎样学习php?. php100的新版教程,w3schools,php官网 学而不思则罔,思而不学则殆:一边学,一边做总结: 光说不练假把式,光练不说傻把式:一边学,