C++中int型128转入char型变量c中
2015-10-05 18:48
357 查看
《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?
#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?
相关文章推荐
- 深入理解C/C++ [Deep C (and C++)]
- C语言中指针数组和数组指针
- 【C++学习】float与double的范围和精度
- Bridge(桥接)设计模式
- C++11新特性--右值引用
- 【源码】员工管理系统c++大型实验,含实验报告
- C/C++基本输入输出函数
- 面试复习(C++)之希尔排序
- 第二周-项目1 - C/C++语言中函数参数传递的三种方式
- C++中赋值运算符与逗号运算符的用法详解
- C++中对象的赋值与复制操作详细解析
- C++中复制构造函数和重载赋值操作符总结
- 设计模式C++达到 3.抽象工厂
- 【第4周 项目6 - 多项式求和】
- 深入C++中构造函数、拷贝构造函数、赋值操作符、析构函数的调用过程总结
- 【第4周 项目5 - 猴子选大王】
- 第六周-项目2 - 建立链栈算法库
- 【第4周 项目3 - 单链表应用(2)】
- C++继承方式
- 第4周项目3 单链表应用