C语言 整型常量给变量的赋值,看不懂.帮帮忙!

来源:百度知道 编辑:UC知道 时间:2024/07/08 07:52:59
main()
{
int a,b,c,d;
long x,y;
unsigned u;
a=53;
b=-3;
c=65533;
d=oxABCDE;
u=-2;
x=a;
printf("a=%d,a=%u\n",a,a); /*%d 以带符号十进制形式输出整数*/
printf("b=%d,b=%u\n",b,b); /*%u 以无符号十进制形式输出整数*/
printf("c=%d,c=%u\n",c,c);
printf("d=%d,d=%x\n",d,d); /*%x 以无符号十六进制形式输出整数*/
printf("u=%d,u=%u\n",u,u);
printf("x=%|d,x=%|x\n",x,x); /*%|d 以带符号十进制形式输出整数
%|x 以带符号十六进制形式输出整数*/

运行结果为:
a=53,a=53, b=-3,b=65533
c=-3,c=65533
d=-17186,d=bcde
u=-2,u=65534
x=53,x=35

我就是看不明白,,为什么a b c d u x 为得这个结果

有知道的请帮忙解释一下程序编译过程.
还有二进制,八进制,十进制和十六进制之间的互相换算是怎么换的。
这个东西弄的人好头疼啊!!!

先说第一个Printf语句
a=53没什么好说的正常显示,显示出来就应该是53
a=53没来就是正数!,有无吃无符号都是53

第二行就不一样了
b=-3按%d显示就是-3! -3的二进制就是 10000011,这种中第一位是符号,这里是1就是负, 后面的代表3,也就是0000011,那么这个二进制数按有符号显示!那么程序就会把第一位数认为是符号,所以就显示为-3,而按%U显示就把第一位的数年当成了数字!因为无符号吗?所以8位二位进制数都表示数字!而负数呢?在系统里用被码表示,! 那么负数-3在数据内部的型形"11111100" 这个数正好就是65533
所以就有了这第二行的显示!

也许,你会问了为什么又冒出了个补码!负数和他有什么关系啊!
这就要跟硬件系统有关系了!我们的CPU其实只会做加法运算!我们所说的CPU3.0M的就是说每秒!CPU能计算3G赫兹次的加法运算!
那么,即然我们只会做加法会算!1-2就是1+(-2)那么,我们的计算机就算不出来!
算以就把负数用补码的形式表式!这样减去一个数就变成了加上一个数!这样我们的计算机就能够计算了!实质上我们的计算机就能计算加法!别乘除法了!连减法都不会做.这就是用补码表示负数的原因

好!让我接下来说第三行
第三行正好和第二行相反!c=65533按那个显示正好与第二行相反映

第四行,第五行!第六行同上!都是一个意思!

这个形式就像!面
面被包成饺子就是饺子
包成包子就是包子
同理都是面!看你怎么处理
拿到计算机上也是一样!
看计算机怎么理解输入的数据!
按%d就是理解为一个字节的8位二进制数的第一位是符号
按%U就是理解为一个字节里8位全是数据!

这个道理很简单!但越是简单的道理!越不好讲!
哈哈!共同进步88