1. 基本内置类型有哪些
2. 带符号和无符号类型
3. 类型转换 、含有无符号类型的表达式
4. 字面值常量
一.基本内置类型
- 基本内置类型包括:算术类型和void空类型。
- 其中算术类型分为:bool,char,int,float。。。。。(p33)
算术类型的存储空间大小依机器而定;
4. wchar_t类型用于扩展字符集,如汉字,日文等;1字节=8位 1B = 8bi 1字/word= 32b/4B
a. 大多数计算机以2的整数幂个比特作为块来处理内存
b. 可寻址的最小内存块称为“字节byte”
c. 存储的基本单位称为“字word”,它通常由几个字节组成,大多数机器的字
节由8比特组成,字则由32或64比特构成,也就是4或8字节。P31的《内置类型和机器级表示》非常重要,值得细读! 具体看书本
short:半个机器字长
int:一个机器字长
lon个:2个机器字长(在32位操作系统中int与long通常字长是相同的!)
int main()
{
int a;
long b;
int *c;
char *d;
int Byteof_int=sizeof(a);
int Byteof_long=sizeof(b);
int Byteof_int_point=sizeof(c);
int Byteof_char_point=sizeof(d);
cout << "int:" <<Byteof_int<<endl;
cout << "long:" <<Byteof_long<<endl;
cout << "int *:" <<Byteof_int_point<<endl;
cout << "char *:" <<Byteof_char_point<<endl;
return 0;
}
//显示结果
/*
int : 4
long :4
int *:4
char *:4
//总结
int : 4 字节
long :4 字节
bool:1字节
char:1字节
wchar_t:2字节
float:4字节
double:8 字节
指针类型:4 字节
特别要注意的时,对于指针类型,都占4个字节,因为指针指向的是一个地址,32位操作系统就是4字节。当然如果是64位操作系统那就是8字节了。
此外,int这个类型占操作系统一个内存单元大小。早先16位操作系统一个内存单元是64位,所以是2个字节;32位系统一个内存单元是是32位,所以是4字节;64位操作系统一个内存单元是16位,故占8个字节。
二、带符号和类型和无符号类型
- 除去bool型和扩展的字符型之外,其他整型数都可以划分为带符号和无符号的;
- 带符号的可以表示正数、负数或0,无符号的只能表示大于等于0的值;
* 如果前面没有unsigned 则默认是带符号的,如int 、short 、long等;* - 与整型不同,字符型有 三种:char 、 signed char 、 unsigned char,但字符的表现形式只有两种,带符号和无符号。
- 无符号类型所有比特用来存储值,有符号的最前面一个比特拿来表示正
unsigned char 表示范围:0-255
signed char 表示范文: -128–127
**
三 、类型转换
一些常见的类型转换
p33 共6项,这里就不说了。
重要的是第5、6条
a. 当我们赋给无符号类型一个超出它表示范围的值时,结果是初始值对无符号类型表示数值总数取模后的余数。
b. 当我们给带符号类型赋值一个超出它表示范围的值时,结果是未定义的。
#include<iostream>
int main()
{ //假设系统的char占8比特
bool b=42;
std::cout<<"b is:"<<b<<std::endl; //b的值为1
int i=b;
std::cout<<"i is:"<<i<<std::endl; //i的值为1
i=3.14; //i的值为3,因为i是整形,把浮点型数赋给整形数,结果只去小数点前面的那些
std::cout<<"i is:"<<i<<std::endl;
double pi=i; //pi的值为3.0、 当把整数赋给浮点数的时候,小数部分记为0;
std::cout<<"pi is:"<<pi<<std::endl;
unsigned char c=-1; // 模运算。
std::cout<<"c is:"<<c<<std::endl;
signed char c2=256; //有符号的字符型能表示的数的范围是 -127---127 256已经超出范围,所以是为定义的
std::cout<<"c2 is:"<<c2<<std::endl;
return 0;
}
含有无符号类型的表达式
a. 无符号类型和有符号类型的运算;
b. 无符号类型数相减结果不能为负数;
c. 无符号数用于for循环
总结:如果表达式中既有带符号类型又有无符号类型,当带符号类型取值为负数时会出现异常结果,这是因为带符号数会自动转换成无符号数。 所有,不要混用带符号和五符号类型。
四、字面值常量
- 整型和浮点型字面值
(1) 可以将整型字面值写作十进制数、八进制数或十六进驻数的形式
a. 八进制 : 以0 开头的整数代表八进制数 如:024;
b. 十六进制:以0x 或 0X 开头的代表十六进制数 如:0x14
(2) 浮点型字面值表现为一个小数或以科学计数法表示的指数,其中指数部分用E或e标识。 如 3.14159 3.14159E0 字符和字符串字面值
a. 字符由单引号括起来,字符串由双引号。
编译器在每个字符串的结尾处添加一个空字符(‘\0’),字符串字面值实际长度要比它内容多1。b. 字符串字面值的连接
std::out<<"a really long string literal"
"that spans two lines"<<std::endl;