打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
数据类型、类型转换、输入输出




Meet success like a gentleman and disaster like a man.


接着上篇文章继续介绍 C++ 基础,本文主要介绍 标准数据类型、数据类型转换、数据输入与输出


    C++ 基础


标准数据类型


标准数据类型即 C++ 中的基本数据类型,系统定义的简单数据类型,也称为算术类型,存储空间 bit)依机器而定, C++ 只规定了最小存储空间,一共分为 4 种数据类型


整型 

整型数据从字面即可理解,为整数数据。整型值可以用十进制,十六进制或八进制符号指定,前面可以加上可选的符号( - 或者  +)。如果用八进制符号,数字前必须加上  0(零),用十六进制符号数字前必须加上 0x在 C++ 语言中,整型类型标识符为 int,根据整型变量的取值范围又可将整型变量定义为以下 8 种整型类型


短整型

   short [int],占2字节(16位),-2^15 ~ 2^15-1

无符号短整型

   unsigned short [int],占2字节(16位),0 ~ 2^16-1

整型

   [long] int,占4字节(32位),-2^31 ~ 2^31-1

无符号整型

   unsigned [int],占2字节(16位),0 ~ 2^16-1

长整型

   long [int],占4字节(32位),-2^31 ~ 2^31-1

无符号长整型

   unsigned long [int],占4字节(32位),0 ~ 2^32-1

超长整型

   long long [int],占8字节(64位),-2^63 ~ 2^63-1

无符号超长整型

   unsigned long long,占8字节(64位),0 ~ 2^64-1

注:

通常将8位的块作为一个字节,32位或4个字节作为一个字(word)


实型

实型又称实数或浮点数,可分为 3 种类型:单精度浮点数、双精度浮点数 和 长双精度浮点数。一般的表示方法有 小数形式 和 指数形式


单精度实型

   float,占4字节(32位),有效位6~7位,-3.4E-38 ~ 3.4E+38

双精度实型

   double,占8字节(64位),有效位15~16位,-1.7E+308 ~ 1.7E+308

长双精度实型

   long double,占16字节(128位),有效位18~19位,-3.4E+4932 ~ 1.1E+4932


字符型

字符型即单个字符,用单引号括起来表示,如 'a'(数字也可以,如 '1'),字符型使用标识符 char 来表示

注:

字符只能是一个而且区分大小('A' 与 'a' 是不同的),只能用单引号括起来,不能用双引号(用双引号括起来的是字符串,字符串可以单个,也可多个)

字符在运算的时候采用 ASCII 编码(字符其实可以看成是单字节整型,取值范围 0~255)


转义字符

转义字符是一种特殊的字符常量,以反斜线 \ 开头,后跟一个或几个字符。转义字符具有特定的含义,不同于字符原有的意义,故称转义字符,转义字符有三种用法:表示控制字符、表示特殊字符、表示所有字符


常用的转义字符

   '\n' 换行    '\t' 水平制表    '\b' 退格    '\r' 回车(不换行)    '\0' 空字符    '\'' 单引号    '\'' 双引号    '\\' 一个反斜杠字符    '\ddd'  1~3位八进制数所代表的字符    '\xhh'  1~2位十六进制数所代表的字符


布尔型

布尔型也称为逻辑型,用标识符 bool 来表示,其取值为true(逻辑真)和false(逻辑假),存储字节数在不同编译系统中可能有所不同,可以当作整数用(true一般为1,false为0),把其它类型的值转换为布尔值时,非零值转换为true,零值转换为false

注:

C++中的布尔变量存储的就是 0 和 非0,0 为 false,非0 为 true,在输出的时候,只会输出 0 和 1,如果要输出 true 或 false 只能自己判断布尔变量的真假,真则输出 true,假则输出 false,需要写判断语句,最简单的方法就是利用自带的 boolalpha 来输出 true 或 false

   cout < boolalpha="">< 布尔变量=""><>


数据类型转换

C++ 中不同的数据类型的对象进行运算时候,或者需要将结果转换成期望的数据类型时,这时就要根据数据类型的转换规则进行转换

混合运算时的类型转换规则

整型、实型、字符型 数据间可以进行混合运算,这种情况下,需要将 不一致 的数据类型转换成 一致 的数据类型,然后进行运算。为了保证运算精度,系统在运算时的转换规则是将 存储长度较短 的运算对象转换成 存储长度较长 的类型,然后再进行处理,这种转换是系统 自动 进行的,默认如下


   // 以下表示当运算对象为不同类型数据时,需转换为同一数据类型然后进行运算    int -> unsigned int -> long int -> double    // 以下两种在运算时,必定会先转换为 int / double 然后与其他数据进行运算    char、short int -> intfloat -> double


赋值时的类型转换规则

当进行赋值运算时,如果两侧的数据类型不同,需进行类型转换,这种转换是系统 自动 进行的,规则如下


float、double 型赋值给 int 型

直接截断小数(不四舍五入,直接舍去)


int、char 型赋值给 float、double 型

补足有效位(后面添 0)


char 型(单字节)赋值给 int 型(4字节)

数值赋给 int 型的低 8 位(存入的是字符的 ASCII 码),其他位补 0


long int 型赋值给 int 型

long int 型截断低字节给 int 型


int 型赋值给 long int 型

赋给 long int 型的低 16 位,如果 int 型的最高位是 0,则 long int 的高 16 位全为 0;如果 int 型的最高位为 1,则 long int 型的高 16 位全为 1(称为 符号扩展)


unsigned int 型赋值给 int 型

直接传送数值


非 unsigned int 型赋值给位数相同的 unsigned int 型

直接传送数值


强制类型转换

强制类型转换只是 临时 转换,强制转换运算符组成的运算表达式的一般形式为:

   类型名(表达式)    a + int( b/3 );

注:

不管被转换的是表达式或者单个变量都需要用括号括起来


数据输入输出

C++ 中没有提供专门的输入输出语句,所有的输入输出都是调用标准库函数中的输入输出函数来实现的,在使用时,在开头添加如下语句

   #include    #include    using namespace std;


字符输入 -- getchar

getchar 函数是一个无参函数,接收从键盘输入的 单个 字符数据,通常把输入的字符赋予一个字符变量,构成赋值语句

   char a;    a = getchar();

注:

getchar 函数只能接受单个字符,输入的数字也按字符处理,如果输入多余一个字符时,只接受第一个字符

getchar 函数会等待用户输入,直到按回车键才结束,这个特性可用于暂停程序的运行,直接按回车结束

如果在程序中有连续两个以上的 getchar 函数,应该一次性输入所需要的字符,最后按回车键,否则会把回车作为一个字符传给后面的 getchar 函数


字符输出 -- putchar

putchar 函数是字符输出函数,向标准输出设备输出 单个 字符数据


   putchar(a);



标准输入 -- scanf

scanf 函数用于格式化输入任意数据列表


   scanf(格式空字符, 地址列表);    // 地址列表中给出个变量的地址,可以为变量的地址,也可以为字符串的首地址    // 格式控制符由 % 和格式符组成,作用是将要输入的字符按指定的格式输入,如 %d, %c 等    // d、i:用于输入十进制整数    // u:用于无符号十进制形式输入十进制整数
   // o:用于输入八进制整数    // x:用于输入十六进制整数    // c:用于输入单个字符    // s:用于输入字符串(非空格开始,空格结束,字符串变量以 '\0' 结尾)    // f:用于输入实数(小数或指数均可)
   // e:与 f 相同    // l:用于长整型数(%ld、%lo、%lx)或 double 型实数(%lf、%le)    // h:用于短整型数(%hd、%ho、%hx)    // *:表示对应输入量不赋给一个变量    scanf('%d*d%d', &a, &b);    // 输入 1 2 3,输出 a=1,b=3    // 域宽:指定输入所占列宽(一个整数)    scanf('%4d%4d', &a, &b);    // 输入 1234567,输出 a=1234, b=567

如果 scanf 中有非格式符加入作为分隔符,则在输入的时候也应添加指定分隔符

   // 注意 %d 之间的 逗号(作为了指定的分隔符)    scanf('%d, %d', &a, &b);    // 输入 5,6,输出 a=5,b=6

注:

上面说过了地址列表中可以是变量的地址,也可以是字符串的首地址& 就是取址符,如果输入的是字符数组变量的话,此处变量名就代表了首地址,不需要取址符

   char a[20];    scanf('%s', a);


标准输出 -- printf

printf 函数用于格式化输出任意数据列表

    print(格式控制符, 输出列表);    // 格式控制符由输入格式说明和普通字符组成,必须用双引号包裹起来    // 格式说明由 % 和格式字符组成,比如 %d,%c 等,普通字符即在输出时原样输出的字符,一般在显示时起提示作用    // 输出列表则是需要输出的数据,各参数间用逗号分开,格式说明和输出项需一一对应    // d、i:以带符号的十进制形式输出整数,正数的(+)号省略不输出    // u:以无符号十进制形式输出整数    // x、X:以十六进制无符号形式输出整数(不输出前导符 0x)    // o:以八进制无符号形式输出整数(不输出前导符 0)    // c:输出一个字符    // s:输出字符串    // f:以小数形式输出单、双精度,隐含输出 6 位小数    // e、E:以指数形式输出单、双精度,隐含输出 6 位小数    // g、G:自动选用 %f、%e、%E 格式中输出宽度最小的一种使用    // %d:输出数字长度为变量数值的实际长度    // %md:输出 m 位(不足补空位,大于 m 位时按实际长度输出)    // %-md:输出 m 位,左对齐输出    // %ld:表示输出长整型数据    // %mld:指定长整型输出宽度 m 位,左边补空格,否则按实际位数输出    // %0md,%0mld:数字 0 表示位数不足 m 时补 0    // %f:按实际格式输出,整数部分按实际位数输出,小数部分输出 6 位    // %m.nf:总位数 m(含小数点),其中 n 位小数    // %-m.nf:总位数 m(含小数点),其中 n 位小数,左对齐    // %s:按实际宽度输出一个字符串    // %ms:输出 m 位(不足补空位,大于 m 位时按实际长度输出)    // %-ms:左对齐,不足右补空格    // %m.ns:总位数 m,其中字符数最多 n 个,左补空格    // %-m.ns:同上,右补空格


流输入 -- cin

cin 和 流读取运算符 >> 一起使用,接收输入的数据,多个 >> 连续使用可以对多个变量输入数据,从外部输入的数据的个数、类型必须和变量一致,从键盘读取数据时,各数据之间要有分隔符,分隔符可以是一个或多个空格、回车等

   cin >> a >> b;    // 键盘输入    2 3


流输出 -- cout

cout 和 流插入运算符  一起使用,向标准输出设备输出数据,多个  连续使用可以输出多个数据

   cout < a=""><>

注:

输出字符串常量时,需用双引号将字符串常量包裹起来,以区别变量名

   cout < 'aa';=""  =""  cout=""><>

cout 不会在输出内容的末尾加 换行符,所以在需要换行的地方,必须插入换行符 \n 或者 endl

   cout < 'aa\n';=""  =""  cout="">< aa=""><>


数据输入输出方式比较

Dev C++ 在使用 cincout 时必须调用 iostream 库,使用其他输入输出时,必须调用 cstdio 库,在时效上和格式化方面,scanfprintf 都优于 cin 和 cout,但是就简便而言,后者更优


习题

结合上一篇文章一共学习了 常量变量运算符数据类型类型转换输入输出,运用这些知识可以尝试做一些习题。下面推荐一个在线OJ,其中 1.1、1.2、1.3 共 40 题可以练习


   http://noi.openjudge.cn/


注:

运算中常用的库函数(习题中可能出现)

绝对值函数

abs(x):求一个数 x 的绝对值

自然数指数函数

exp(x):求实数 x 的自然指数 e^x

向下取整

floor(x):求不大于实数 x 的最大整数

向上取整

ceil(x):求不小于实数 x 的最小整数

自然对数函数

log(x):求实数 x 的自然数对数

指数函数

pow(x, y):计算 x^y,结果为双精度实数

随机函数

rand():产生 0 到 RAND-MAX 之间的随机整数

平方根函数

sqrt(x):求实数 x 的平方根




本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
笔记1
CC
C语言的变量和数据类型
【Java】基础07:常量、变量和数据类型
C语言中系统函数
Java数据类型间的相互转换
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服