高手请进~c语言不同类型之间的赋值
#include<stdio.h>voidmain(){unsignedinta;longintb;a=-1;b=a;printf("%x,%d,%o\n",a,a,a)...
#include<stdio.h>
void main()
{
unsigned int a;
long int b;
a=-1;
b=a;
printf("%x,%d,%o\n",a,a,a);
printf("%x,%d,%o\n",b,b,b) ;
}
输出%d的b的值为0为什么?
有高手可以总结下c语言不同类型之间的赋值规律吗 展开
void main()
{
unsigned int a;
long int b;
a=-1;
b=a;
printf("%x,%d,%o\n",a,a,a);
printf("%x,%d,%o\n",b,b,b) ;
}
输出%d的b的值为0为什么?
有高手可以总结下c语言不同类型之间的赋值规律吗 展开
5个回答
展开全部
我在VC++6.0上执行程序的结果也是-1而不是0 。
你是用的什么运行的?
这个与数据在计算机中的存放方式有关,所有数据在计算机中都是以二进制补码的形式存放的。我们先来看看在TC2.0环境下的情况。在TC中int 型为两个字节,而long int型为四个字节,也就是
int的长度为
--------
--------
long int型的长度为
--------
--------
--------
--------
无符号数的长度也是一样的,当楼主把-1赋给无符号的整型a时,a中的二进制情况为
10000000
00000001
而楼主把a又赋给long int型的b时,b中的二进制存放情况为
10000000
00000001
00000000
00000000
这时楼主又按"%d"的格式输出b,"%d"在TC2.0中只输出了两个字节,所以就只输出了
00000000
00000000
其结果就为“0”
如果楼主按“%ld"的格式输出,这时输出的就是四个字节,即
10000000
00000001
00000000
00000000
这个二进制数所对应的十进制数为-65536所以结果就会输出“-65536”
若是在VC++6.0中结果就不一样了,因为在VC++中int型与long int型的长度都是四个字节所以它们之间相互赋值不会有什么影响,结果仍为“-1”.如果学过汇编语言对这些就应该比较清楚。
你是用的什么运行的?
这个与数据在计算机中的存放方式有关,所有数据在计算机中都是以二进制补码的形式存放的。我们先来看看在TC2.0环境下的情况。在TC中int 型为两个字节,而long int型为四个字节,也就是
int的长度为
--------
--------
long int型的长度为
--------
--------
--------
--------
无符号数的长度也是一样的,当楼主把-1赋给无符号的整型a时,a中的二进制情况为
10000000
00000001
而楼主把a又赋给long int型的b时,b中的二进制存放情况为
10000000
00000001
00000000
00000000
这时楼主又按"%d"的格式输出b,"%d"在TC2.0中只输出了两个字节,所以就只输出了
00000000
00000000
其结果就为“0”
如果楼主按“%ld"的格式输出,这时输出的就是四个字节,即
10000000
00000001
00000000
00000000
这个二进制数所对应的十进制数为-65536所以结果就会输出“-65536”
若是在VC++6.0中结果就不一样了,因为在VC++中int型与long int型的长度都是四个字节所以它们之间相互赋值不会有什么影响,结果仍为“-1”.如果学过汇编语言对这些就应该比较清楚。
展开全部
我在VC++6.0上执行程序的结果是-1而不是0 你再试一下
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
%d整型、%ld长整型、%c字符、%s字符串、%f浮点型
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
paulclover - 初入江湖 二级
正确!
正确!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
-1负数
unsigned 无符号
出错了
unsigned 无符号
出错了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询