dnf防具怎么堆命中:VC++中赋值时的类型转换

来源:百度文库 编辑:查人人中国名人网 时间:2024/05/13 00:55:08
书上有这么一点:
“将字符型数据赋给整形变量时,分两种情况:
对于无符号字符类型的字符变量,低八位不变,高位补零后赋值。而对于有符号字符类型的变量,若字节的符号位为零时,与无符号字符类型的转换规则相同;当该字节的符号位为1时,将高位全部置1后赋值。”
怎么理解上面的话?什么叫做低八位?从几位起算高位?
例如:
signed char c1=250;
int a;
a=c1;
cout<<a<<endl;
输出为6
请用上面的方法解释一下运算的步奏!
噢!
不好意思,打错了
输出应该是-6

楼主的输出写错了,应该是-6。

一般的整型变量位数都高于8位,比如VC里int是64位,但char型变量只有8位,那么把一个char型变量赋给一个int型变量时,高56位就根据char的符号位来填充,无符号或有符号的正数就补0,有符号的负数补1。

比如你给的程序signed char的取值范围实际上是-128-127。250对应的2进制数为11111010(即有符号数的-6),赋给int a时,符号位(最高位)为1,所以a的高56位都补1,得到11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111010,这是-6的补码形式,所以a=-6。

答案应该是-6把?
250相当于0FAH,相当于-6
如果是unsigned char c1那就是250
0FAH=11111010B
首位为1取反加负号
变成00000101,再+1=00000110=6
就是-6
如果c1=257那么进入以后系统自动认为a=1,只要减去256的倍数就可以
这样比较好理解