C++primer 2.1 基本内置类型数据范围、机器级表示、赋值时候的数据类型隐式转换

1. 基本内置类型有哪些

2. 带符号和无符号类型

3. 类型转换 、含有无符号类型的表达式

4. 字面值常量


一.基本内置类型

  1. 基本内置类型包括:算术类型和void空类型。
  2. 其中算术类型分为:bool,char,int,float。。。。。(p33)
  3. 算术类型的存储空间大小依机器而定;
    4. wchar_t类型用于扩展字符集,如汉字,日文等;

  4. 1字节=8位 1B = 8bi 1字/word= 32b/4B
    a. 大多数计算机以2的整数幂个比特作为块来处理内存
    b. 可寻址的最小内存块称为“字节byte”
    c. 存储的基本单位称为“字word”,它通常由几个字节组成,大多数机器的字
    节由8比特组成,字则由32或64比特构成,也就是4或8字节。

    P31的《内置类型和机器级表示》非常重要,值得细读! 具体看书本

  5. 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个字节。

二、带符号和类型和无符号类型

  1. 除去bool型和扩展的字符型之外,其他整型数都可以划分为带符号和无符号的;
  2. 带符号的可以表示正数、负数或0,无符号的只能表示大于等于0的值;
    * 如果前面没有unsigned 则默认是带符号的,如int 、short 、long等;*
  3. 与整型不同,字符型有 三种:char 、 signed char 、 unsigned char,但字符的表现形式只有两种,带符号和无符号。
  4. 无符号类型所有比特用来存储值,有符号的最前面一个比特拿来表示正
    unsigned char 表示范围:0-255
    signed char 表示范文: -128–127

**

三 、类型转换

  1. 一些常见的类型转换

    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、 当把整数赋给浮点数的时候,小数部分记为0std::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;
}
  1. 含有无符号类型的表达式

    a. 无符号类型和有符号类型的运算;
    b. 无符号类型数相减结果不能为负数;
    c. 无符号数用于for循环
    总结:如果表达式中既有带符号类型又有无符号类型,当带符号类型取值为负数时会出现异常结果,这是因为带符号数会自动转换成无符号数。 所有,不要混用带符号和五符号类型。

四、字面值常量

  1. 整型和浮点型字面值
    (1) 可以将整型字面值写作十进制数、八进制数或十六进驻数的形式
    a. 八进制 : 以0 开头的整数代表八进制数 如:024;
    b. 十六进制:以0x 或 0X 开头的代表十六进制数 如:0x14
    (2) 浮点型字面值表现为一个小数或以科学计数法表示的指数,其中指数部分用E或e标识。 如 3.14159 3.14159E0
  2. 字符和字符串字面值
    a. 字符由单引号括起来,字符串由双引号。
    编译器在每个字符串的结尾处添加一个空字符(‘\0’),字符串字面值实际长度要比它内容多1。

    b. 字符串字面值的连接

std::out<<"a really long string literal"
          "that spans two lines"<<std::endl;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值