我,我,我,我的电脑超神啦?

2017-02-03 20:29:31 +08:00
 Newyorkcity


我的电脑的字长 4128 字节?? 这可咋整啊

3274 次点击
所在节点    问与答
20 条回复
a87150
2017-02-03 20:34:20 +08:00
\n
huluhulu
2017-02-03 20:36:32 +08:00
\n
huluhulu
2017-02-03 20:37:03 +08:00
c4 还被吃掉了呢
lalalakakaka
2017-02-03 20:40:21 +08:00
2333
zbinlin
2017-02-03 20:44:05 +08:00
第 1 与第 2 个 printf 没换行
Newyorkcity
2017-02-03 20:45:40 +08:00
自惭形秽,没脸见人了。
Newyorkcity
2017-02-03 20:48:34 +08:00
@a87150
@huluhulu
@lalalakakaka
@zbinlin
再请问一下
为何 c1+1 的输出是 128 ,不应该是-128 么?
同样 c2-1 的输出不应该是 127 么。。
c3+1 不应该溢出所以变为 0 了么。。
RE
2017-02-03 21:16:00 +08:00
@Newyorkcity c1 = 127 ,为何 127 + 1 会等于 -128 ???
Newyorkcity
2017-02-03 21:19:56 +08:00
@RE char 在内存只占用一个字节即 8 个比特,所以 127 的存储是 01111111 ,加一之后变为 10000000 ,再没有声明 unsined 的情况下不应该把它当做-128 的补码,输出-128 么?
linfx7
2017-02-03 21:32:50 +08:00
@Newyorkcity 是因为%d 吧
zbinlin
2017-02-03 21:35:20 +08:00
@Newyorkcity 你又不是使用 `c1 += 1`,在 c1 上赋值
azh7138m
2017-02-03 22:11:21 +08:00
@RE 简略点就算是 char+int ,结果是按 int 来
azh7138m
2017-02-03 22:12:17 +08:00
@azh7138m 回复错了。。。尴尬
lris1930170407
2017-02-03 22:16:35 +08:00
仿佛回到了大一学 C 语言的计算机教室里面
huluhulu
2017-02-03 22:49:56 +08:00
@Newyorkcity 参考 整型提升
Newyorkcity
2017-02-03 23:03:56 +08:00
@azh7138m 应该不是,我试着强制转换类型后还是输出 128
int main(){
char c = 127;
printf("c+1=%d\n",c+1);
printf("c+(char)1=%d\n",c+(char)1) ;
c = c + char(1);
printf("经过 c = c + char(1)之后, c=%d\n",c);

return 0;
}
输出结果:
c+1=128
c+(char)1=128
经过 c = c + char(1)之后, c=-128
@zbinlin wow ,可是为什么在 print 中赋值和在外面单独赋值会有这么大的差别呢?
davy1995
2017-02-04 01:00:51 +08:00
@Newyorkcity 前两个哪里是赋值语句?
davy1995
2017-02-04 01:09:54 +08:00
@Newyorkcity 前两个又没有重新赋值给一个 char 类型变量
scnace
2017-02-04 09:01:54 +08:00
去看下 printf 的原型函数呗~
Newyorkcity
2017-02-04 10:27:06 +08:00
@davy1995 即便 printf 函数内的那种不算赋值,为什么传 127+char(1)给%d 和传 char c = 128 给%d 的结果不同呢?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/337926

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX