C++中int型128转入char型变量c中

《C++程序设计原理与实践》Bjarne Stroustrup著 第47页程序。
#include <iostream>
using namespace std;


int main()
{
        double d=0;
        while(cin>>d){
        int i=d;
        char c=i;
        int i2=c;
        cout<<"d=="<<d<<"\n"
                <<"i=="<<i<<"\n"
                <<"i2=="<<i2<<"\n"
                <<"char("<<c<<")"<<endl;
        }
        
        
        return 0;
}
第一个问题:int型128为什么能转为char型的128?此程序,第10行,执行        “char c=i;”时,当,i值为128时,仍能输出ASCII码为128的字符(在Windows7系统中,用Borland C++ 5.5 for Win32)。
但是,int占4个字节,在转化为char型时只保留最底1个字节的值,而char的取值在-128~127之间。我认为程序只能输出0~127之间的ASCII码字符,而不能输出ASCII码为128的字符。
也就是说,int型数据转为char型时,只能转换0~127之间的值。为何,i值为128时,仍能输出ASCII码为128的字符?
第二个问题:从类型间转换看:int型128补码为:0000 0000  0000 0000  0000 0000  1000 0000【补】转化为char型截取低8位:1000 0000【补】。到这里又出现问题,1000 0000【补】表示的数值是128?还是-0?
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值