C++学习之路C++Primer学习笔记(三)_类型转换

1.算数类型

.a.算数类型分为两类:整型(包括字符和布尔类型在内)和浮点型;
b.除去布尔类型和扩展的字符型外,其他整型划分为带符号的(signed)和无符号的(unsigned)两种;
c.与其他整型不同,字符型被分为三种:char,signed char和unsigned char,但是类型char实际上会由编译器决定表现为上述两种形式中的一种,因此字符表现形式只有两种;


2.当我们使用了一种类型而其实对象应该取另一种类型时,程序会自动进行类型转换。

a.当我们附给无符号类型一个超出它的表示范围它表示范围的值时,结果是初始值对无符号类型表示数值总数取模后的余数。

例如:unsigned char c=-1;

8比特大小的unsigned char可以表示0至255区间共256个值。

-1的补码是0xFFFFFFFF,化成10进制是4294967295,对256取模得255

b.当我们给带符号类型一个超出它表示的范围时,结果是未定义的。程序状况未知。

c.如果表达式里既有带符号类型,又有无符号类型,当带符号类型取值为负时会出现异常结果,这是因为带符号数会自动转换成无符号数。

例如:(unsigned)1*(signed)-1=4294967295;

d.当用无符号数来写循环时应该注意。

如:for(unsigned i=10;i>=0;--i)

         std::cout<<i<<std::endl;

当i=0后减1得-1,-1会自动穿换成一个合法的无符号数,会变成死循环。

一种解决办法是用while语句来代替for语句,因为我们能在输出之前先减1

即unsigned i=11;

    while(i>0){

     --i;

    std::cout<<i<<std::endl;

    }


由于要先做减1得操作,所以初始化u得值应该比输出最大值大1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值