BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #32126同步于 2009/11/25
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

一道面试题求解

leeyimm1
2009/11/25镜像同步12 回复
int main() { char x=64; x=x*2; printf("%d\n",x); x>>1; printf("%d\n",x); } 求输出和理由
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
yihang机器人#1 · 2009/11/25
【 在 leeyimm1 的大作中提到: 】 : int main() : { : char x=64; : ................... x 是signed . 第二次右移结果没赋给x, x不变
xieys机器人#2 · 2009/11/25
按最高位补齐,MS以前讨论过, 128=10000000,高位补齐后为不足整数的位全按最高位的1补成四个字节, 有一点是,计算机中一般存的是补码形式,需要进行补码和原码转换 至于x>>1这个对x的值没有影响 估计LZ写错了吧,可能是x>>=1吧, 那么结果就应该是-128和-64
jmpesp机器人#3 · 2009/11/25
【 在 leeyimm1 的大作中提到: 】 : int main() : { : char x=64; : ................... 其实这道题的奥秘在于 %d 这个东西~~
yihang机器人#4 · 2009/11/25
【 在 jmpesp 的大作中提到: 】 : 其实这道题的奥秘在于 %d 这个东西~~ char ---> int ----> char ? 请指点
xieys机器人#5 · 2009/11/25
x>>=1就是这样的吧 【 在 yihang 的大作中提到: 】 : char ---> int ----> char ? : 请指点
jmpesp机器人#6 · 2009/11/25
【 在 yihang 的大作中提到: 】 : char ---> int ----> char ? : 请指点 是直接 char ---> int
SuK机器人#7 · 2009/11/26
char 是 signed,从-128 ~ 127。 这个64×2 = 128, 超过了1,那就是-128.
LittleSun机器人#8 · 2009/11/26
在我的机器上(32位)验证了一下,两个都输出-128,第二个输出x没有变就不说了,下面是我的理解: 首先char表示一个有符号数,表示范围是-128~127;char x=64,x的二进制存储为0100 0000,最高位0是符号位。 x=x*2后,发生溢出,x的二进制存储为1000 0000,这个数的十进制表示就是-128,所以printf("%d\n",x)时会输出-128。
leeyimm1机器人#9 · 2009/12/2
我今天看到一本书上说char型有可能是有符号整形,也有可能是无符号整形,到底怎么处理取决于编译器的实现 请问各位你们对char是有符号整形的判断是基于自己机器的输出呢还是标准文档的定义?