C语言的问题,实在搞不明白...

Haruka 2007-10-14 03:22:47
#include<stdio.h>
void main()
{
short int a=-12354u;
printf("%u\n",a);
printf("%d",a);
}
为什么输出是:
4294954942
-12354
到底在计算机内部是怎么转换的?
...全文
219 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
giggham 2007-10-15
  • 打赏
  • 举报
回复
4294954942 + 12354 = 4294967296=2^32
wushichao1987 2007-10-15
  • 打赏
  • 举报
回复
负数在计算机中是按补码存储的,比如-1在计算机中按11111111,(按用一个字节来表示一个整数),当用%u 格式浮输出时,将111111当作一个无符号数输出,即输出为十进制的2的8次方-1,你上面的程序也是这样转换的,建议看看计算机组成原理.
SoftBomb 2007-10-15
  • 打赏
  • 举报
回复
同样的一个二进制串,用不同的解释方法来看待,就会产生不同的结论
整数的表示可以google一下
goodluckyxl 2007-10-15
  • 打赏
  • 举报
回复
printf("%u\n",a);

是转成了unsiged的了
飞哥 2007-10-14
  • 打赏
  • 举报
回复
这个好像有点混乱嘛

你要是知道 -12345u是什么东西就行了,反正都是2进制绕来绕去的
WingForce 2007-10-14
  • 打赏
  • 举报
回复
这个说来话长了。。。
short int a=-12354u;
这句实际上大概会产生下面的机器码:
mov word ptr [a],0CFBEh

69,374

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧