C++ int和char类型的自动类型转换问题
代码如下#include<iostream>usingnamespacestd;intmain(){inta=256+69;charc;c=a;cout<<c<<endl...
代码如下
#include <iostream>
using namespace std;
int main()
{
int a=256+69;
char c;
c=a;
cout<<c<<endl;
return 0;
}
运行结果是 E,书上说是因为赋值时发生数据的截断,只将a的最低一个自己的数据赋给了c,高位字节被截断。为什么不是将a的值325赋值给c而是一个是表达式256+69赋值给c?同样的还有char ch;ch='a+b';cout<<ch;输出的是b……求高人指点。 展开
#include <iostream>
using namespace std;
int main()
{
int a=256+69;
char c;
c=a;
cout<<c<<endl;
return 0;
}
运行结果是 E,书上说是因为赋值时发生数据的截断,只将a的最低一个自己的数据赋给了c,高位字节被截断。为什么不是将a的值325赋值给c而是一个是表达式256+69赋值给c?同样的还有char ch;ch='a+b';cout<<ch;输出的是b……求高人指点。 展开
4个回答
展开全部
你理解错了高位字节和低位字节。
首先a=256+69在编译之后编译器就预先计算了256+69为325,所以a=256+69和a=325是一样的;
325的二进制是:1 0100 0101 取低位字节(后位8)0100 0101=69 (E) ;所以 低位字节并不是说表达式的后面几个数,如果 表达式换成a=300+25 结果还是 E(69),而不是25;
在你的第二个问题中; ch='a+b' 语法是错的 单引号里面只能是一个字符,如果要给出字符串的话应该是:char *ch;ch="a+b"; ;如果你理解了上面的低位字节你不会有下面的疑问了
首先a=256+69在编译之后编译器就预先计算了256+69为325,所以a=256+69和a=325是一样的;
325的二进制是:1 0100 0101 取低位字节(后位8)0100 0101=69 (E) ;所以 低位字节并不是说表达式的后面几个数,如果 表达式换成a=300+25 结果还是 E(69),而不是25;
在你的第二个问题中; ch='a+b' 语法是错的 单引号里面只能是一个字符,如果要给出字符串的话应该是:char *ch;ch="a+b"; ;如果你理解了上面的低位字节你不会有下面的疑问了
追问
那为什么 ch='a+b' 输出的是b呢?我试过ch='b+a' 输出的是a,也就是后面那一个
展开全部
int是16位的,即最大值是2^16-1=65536
char是8位的,即最大值是2^8-1=255
所以把int型数据赋值给char型的时候,就会出现数据溢出,所以它只把低8位赋值给了char型;
char是8位的,即最大值是2^8-1=255
所以把int型数据赋值给char型的时候,就会出现数据溢出,所以它只把低8位赋值给了char型;
追问
为什么不是将a的值325赋值给c,而是一个是表达式256+69赋值给c?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
如果冒的话,数据会循环的。例如char为255,那么256的话就会变成0的那个值。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询