C/C++教程

C++第三章学习笔记——处理数据

本文主要是介绍C++第三章学习笔记——处理数据,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

3.1.3整型

  1. short 至少16位;
  2. int 比 short长;
  3. long 至少32位;且至少与int一样长;
  4. longlong 至少64位;且至少与long一样长;
    头文件climits中包含了关于整型限制的信息,具体来说它定义表示各种限制负号名称,例如,INT_MAX为int的最大取值,CHAR_BIT是字节的位数。
//limits.cpp
#include<iostream>
#include<climits>
int main()
{
	using namespace std;
	int n_int = INT_MAX;
	short n_short = SHRT_MAX;
	long n_long = LONG_MAX;
	long long n_llong = LLONG_MAX;
	cout << "int is " << sizeof(int) << " bytes." << endl;
	cout << "short is " << sizeof n_short << " bytes." << endl;
	cout << "long is " << sizeof n_long << " bytes." << endl;
	cout << "long long  is " << sizeof n_llong << " bytes." << endl;
	cout << endl;

	cout << "Maximum values:" << endl;
	cout << "int:" << n_int << endl;
	cout << "short:" << n_short << endl;
	cout << "long:" << n_long << endl;
	cout << "long long :" << n_llong << endl << endl;

	cout << "Minimum int value =" << INT_MAX << endl;
	cout << "Bits per byte = " << CHAR_BIT << endl;
	return 0;
}

运算符sizeof.
sizeof运算符指出,在使用8位字节的系统中,int的长度为4个字节。对类型名(如int)使用sizeof 运算符时,应将名称放在括号中;但对变量名(如 n_short)使用该运算符,括号是可选的:
cout<<"int is "<< sizeof(int)<<“bytes.”<<endl;
cout<<“short is”<<sizeof n_short<<“bytes.”<<endl;

预处理器define
#define INT_MAX 32767
该编译指令告诉预处理器:在程序中查找INT_MAX,并将所有的INT_MAX换成32767

3.1.4 无符号类型
前面介绍的4种整型都有一种不能存储负数值的无符号变体。其优点是可以增大变量能够存储的最大值。
例如,如果short表示的范围为-32768到+32767,则无符号版本的表示范围是0-65535.当然当且仅当数值不会为负时才应使用无符号类型,如人口、粒数等。

//exceed.cpp
#include<iostream>
#define ZERO 0 //make ZERO symbol for 0 value
#include<climits>
int main()
{
	using namespace std;
	short sam = SHRT_MAX;//initialize a variable to max value
	unsigned short sue = sam;
	cout << "Sam has " << sam << " dollars and Sue has  " << sue;
	cout << " dollars deposited." << endl
		<< " Add $1 to each account." << endl << "NOW ";
	sam = sam + 1;
	sue = sue + 1;
	cout << "Sam has " << sam << " dollars." << endl
		<< "And Sue has " << sue << " dollars deposited.\nPoor Sam!"<<endl;
	sam = ZERO;
	sue = ZERO;
	cout << "Sam has " << sam << " dollars and Sue has " << sue;
	cout << " dollars deposited." << endl << "Lucky Sue!" << endl;
	return 0;
}

== 该程序将一个short变量(sam)和一个unsigned short 变量(sue)分别设置为最大的short值,在我们的系统上,是32767。然后将这些变量的值都加1。对sue来说无问题,但sam的值从32767变成了-32768!同样对于sam,将其设置为0减去1也不会有问题,但是对于无符号sue,其值设为0减1,变为了665535。==
3.1.6整型字面值
c++ 使用前一两位来标识数字常量的基数。
如果第一位为1~9,则基数为10,即十进制;因此93是以10为基数的。如果第一位是0,第二位是1-7,则基数为8,因此042基数是8,它相当于十进制数34。如果前两位为0X,则基数为16,且在16进制中A-F,分别对应于10-15。因此0xa5为165。
在默认情况下cout以十进制格式显示整数。

//hexoct1.cpp
#include<iostream>
int main(){
 using namespace std;
 int chest = 42;//十进制
 int waist = 0x42;//十六进制
 int inseam = 042;//8进制
 cout<<"Monsieur cuts a striking figure!\n";
 cout<<"chest = "<<chest<<"(42 in demical)\n";
 cout<<"waist = "<<waist<<"(0x42 in hex)\n";
 cout<<"inseam = "<<inseam<<"(042 in octal)\n";
  return 0;
 }

输出:chest=42
waist=66
inseam=34

cout还提供了控制符dec、hex、oct,分别用于指示cout以十进制、十六进制和八进制格式显示整数。

//hexoct2.cpp
#include<iostream>
using namespace std;
int main()
{
	int chest = 42;
	int waist = 42;
	int inseam = 42;
	cout << "Monsieur cuts a striking figure!" << endl;
	cout << "chest= " << chest << " (demical for 42)" << endl;
	cout << hex;
	cout << "waist= " << waist << " (hexademical for 42)" << endl;
	cout << oct;
	cout << "inseam= " << inseam << " (octal for 42)" << endl;
	return 0;
}

诸如cout<<hex;等代码不会在屏幕上显示任何内容,而只是修改cout显示整数的方式。
3.1.7 C++如何确定常量类型

后缀是放在数字后面的字母,用来表示类型。

整数后面的 l 或者 L 表示该整数为 long 常量

u 或者 U 表示 unnsigned int 常量

ul表示 unsigned long 常量

C++11还提供了用来表示long long类型的后缀 ll 和 LL ,还提供了表示 unsigned long long
的后缀ull,uLL,和ULL

关于长度:

在C++中对于不带后缀的十进制整数,将使用下面几种能够存储概述的最小整型来表示:int long 或者long long 。

在int 为16位,long 为32位的计算机系统中,20000被表示为int类型,40000被表示为long
类型3000000000被表示为long long类型

对于不带后缀的十六进制或八进制整数,将使用下面能够存储该数的最小整型来表示:int , unsigned int long,unsigned
long, long long

或者unsigned long long 来表示。

在将40000表示为long 的计算机系统中 十六进制数0x9C40(40000)将被表示为unsigned
int。这是因为十六进制的常用来表示内存地址,而内存地址没有符号。
原文链接:https://blog.csdn.net/lishuzhai/article/details/5056

***3.1.8 char类型:字符和小数
char 是专门用来存储字符(如字母和数字)而设计的。

//chartype.cpp
#include<iostream>
int main()
{
	using namespace std;
	char ch; //declare a char variable
	cout << "Enter a character:" << endl;
	cin >> ch;
	cout << "Thank you for " << ch << " character." << endl;
	return 0;
}

若输入M,输入时,cin将键盘输入的M转换为77(ASCII码);输出时,cout将值77转换为所显示的字符M;cin和cout的行为都是由变量类型来引导的。如果将77纯粹在int变量中,则cout将值.77转换为所显示字符77。

//morechar.cpp
#include<iostream>
using namespace std;
int main()
{
	char ch = 'M';//assign ASCII code fir M to ch
	int i = ch;//store same code in an int
	cout << "The ASCII code for  " << ch << " is " << i << endl;
	cout << "Add one to the character code: " << endl;
	ch = ch + 1;//change character code in ch
	i = ch;// save new character code in i
	cout << "The ASCII code for " << ch << " is " << i << endl;
	cout.put(ch);//using the cout.put function to display a char
	cout.put('!');
	cout << endl << "Done" << endl;
	return 0;
}

程序说明
‘M’(加了单引号)表示字符M的数值编码,因此将char变量ch初始化为‘M’,将把ch 设置为77。然后,程序将同样的值赋给int变量i,这样ch和i的值都是77。接下里cout将ch显示为M,而把i显示为77。
cout.put()成员函数,该函数显示一个字符。
3.3 浮点数
类型:float、double、long double。
cout.setf()函数限定程序显示到小数点后六位。

//floatnum.cpp
#include<iostream>
int main()
{
	using namespace std;
	cout.setf(ios_base::fixed, ios_base::floatfield);//参数ios_base::fixed, ios_base::floatfield是通过iostream来提供的常量
	float tub = 10.0 / 3.0;
	double mint = 10.0 / 3.0;
	const float million = 1.0e6;
	cout << "tub = " << tub;
	cout << ",a million tubs = " << million * tub;
	cout << ",\hand ten million tubs = ";
	 cout << 10 * million * tub << endl;
	 cout << " mint = " << mint << "and a million mints = ";
	 cout << million * mint << endl;
	 return 0;
}

由于cout打印6位小数,因此tub和mint都是精确的。但当程序将每个数乘以一百万后,tub在第7个3之后就与正确的值有了误差。tub在6位有效位上还是精确的。所以他乘以1百万显示的是由误差的(在第7个3之后就与正确的值有了误差)。double类型的变量显示了13个3,因此它至少有13位是精确的。
3.4.4 类型转换
1.初始化和赋值进行的转化(略)
2.以{ }方式初始化时进行转换

唯一的不同就是不允许由精度高的向精度低的转换,不允许浮点型向整型转换。

  int x = 66;
  char c4 = {x};/是不被允许的
  

在上述代码中,初始化C4时,x的值是66,但是在编译器看来,x是一个变量,其值很大。(从x被初始化为66到它被用来初始化c4)这件事编译器是不会跟踪的,即不会做到。
3.强制转换

-格式一:
value (typename) // converts value to typename type

-格式二:
static_cast(thorn) //returns a type long conversion of thorn
就是将thorn转换为long的类型。
通用static_cast(value)

//typecast.cpp
#include<iostream>
int main()
{
	using namespace std;
	int auks,coots;
	auks = 19.99 + 11.99;
	coots = int(19.99) + int(11.99);
	cout << "auks = " << auks << " , coots = " << coots << endl;
	char ch = 'Z';
	cout << "The code for " << ch << " is " << int(ch) << endl;
	cout << "Yes,the code is " << static_cast<int>(ch);
	return 0;

}
这篇关于C++第三章学习笔记——处理数据的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!