2.1.1-2.1.2 变量的基本类型及转换

来源:互联网 发布:apache限制ip访问频率 编辑:程序博客网 时间:2024/06/05 19:59

第二章 变量的基本类型

2.1 基本内置类型

  • 算数类型(arithmetic type):字符、整型数、布尔值和浮点数
  • 空类型(void):不对应具体值,仅用于一些特殊 场合,例如 void main,当函数不反悔任何值时使用空类型作为返回类型。

2.1.1算数类型
  • 整型 :包括字符和布尔类型
  • 浮点型
算数类型:
类型 含义 最小尺寸 bool 布尔类型 未定义(取值为真或假) char 字符 8位 wchar_t 宽字符 16 char16_t Unicode字符 16 char32_t Unicode字符 32 short 短整型 16 int 整型 16 long 长整型 32 long long 长整型 64 float 单精度浮点数 6位有效数字 double 双精度浮点数 10位有效数字 long double 扩展精度浮点数 10位有效数字

基本的字符类型为char,一个char的空间应确保可以存放机器基本字符集中任意字符对应的数字值,也就是说,一个char的大小和一个机器字节一样。也就是8位。

字节 Byte

大多数计算机以2的整数次幂个比特作为块来处理内存,可寻址的最小内存块称为“字节”。一般包括8个二进制位。

字 Word

字由字节构成,例如32或64比特构成,也就是4或8字节。

char和int的区别

int i=55;
cout<< i,就是55

int i = ‘abc’;
cout<< i,结果是6382179
因为’a’的ASCII值为97,内存中占一个字节8位,就是01100001,b是01100010,c是01100011.由于int是32位,不够的位用0补齐,a是高位所以存到高地址位,四个字节在内存中就是
01100011
01100010
01100001
00000000
这样读取的时候跟存入的时候正好相反,先读高地址位,然后低地址位,也就是00000000 01100001 01100010 01100011,对应的十进制数为6382179。

char i=55;
系统会根据在ASCII表中这个整型值代表的控制字符是什么,就输入什么,表中55是数字7的ASCII值,所以cou<< i,结果是7.
char i= 1 ;
cout结果为☺

char i=’1234’;
c++会认为单引号中每一个数值看作一个字符字面值,也就是说1 2 3 4各占一个字节,但是char i只占一个字节,所以会截取其中低位的’4’给i。cout结果为4.


2.1.2 类型转换

bool b=42; //b为真int i=b; //i=1i=3.14; // i的值为3double pi=i; //pi的值为3.0unsigned char c=-1; //假设char占8比特,c的值为255,也就是ASCII值,查表对应输出.signed char c2=256; //假设char占8比特,c2的值是未定义的,因为ascii表只到255.
含有无符号类型的表达式
unsigned u=10;int i= -42;std::cout<< i+i << std::endl; //输出-84std::cout<< i+u << std::endl; //如果int占32位,输出4294967264

第二个输出表达式中,相加前先把整数-42转换为无符号数。

unsigned u1 = 42, u2 = 10;std::cout<< u1-u2 << std::endl; //结果为32std::cout<< u2-u1 << std::endl; //结果是取模后的值,为4294967264,二进制为11111111111111111111111111100000

无符号数不会小于0!运算中如果出现负数,都要将之转化为无符号数!!

2.1.2节练习

#include <iostream>int main(){    unsigned u=10, u2=42;    std::cout<< u2-u << std::endl;    std::cout<< u-u2 << std::endl;    int i=10, i2=42;    std::cout << i2-i << std::endl;    std::cout << i-i2 << std::endl;    std::cout << i-u << std::endl;    std::cout << u-i << std::endl;    return 0;}

输出结果为:
32
4294967264
32
-32
0
0


2016 12.8 一天看了两节。

0 0