简单c程序设计
#include<stdio.h>main(){inta=-1,b,c;b=(unsignedint)a;c=(longint)a;printf("%d\n%ld",b,...
#include<stdio.h>
main()
{
int a=-1,b,c;
b=(unsigned int)a;
c=(long int)a;
printf("%d\n%ld",b,c);
}
两者为什么有不同?
是不一样的 展开
main()
{
int a=-1,b,c;
b=(unsigned int)a;
c=(long int)a;
printf("%d\n%ld",b,c);
}
两者为什么有不同?
是不一样的 展开
展开全部
从根本上来说,a,b,c在内存中的有效数据是一样的,用二进制来表示就是
(int型占4个字节)。
a是int型,而且还是负数,在内存中用反码表示是32个1,即(11111111...)
b是unsigned int型,内存中是16个1(b取的是a的后半段,此时a的前半段仍然在内存中),但是编译器表示b是uint型的,所以当b作为uint型输出时,是一个最大的整数,即2^16 - 1。
c语言的long int和int在使用时我没发现他们的区别,不论从字节长度还是其他不同之处都没发现,暂且可以认为是一样的。
那么为什么结果都是-1呢?
问题就出在printf("%d\n%ld",b,c)上。代码中不难看出,编译器会把b当做int型的数输出,因为标注的是%d(%d表示int型),假设你把这句代码改为printf("%ud\n%ld",b,c),(%ud表示uint型),那么你就知道了。
#include<stdio.h>
main()
{
int a=-1,b,c;
b=(unsigned int)a;
c=(long int)a;
printf("%ud\n%ld\n",b,c);
b>>16;//位操作,表示二进制的b循环右移16位,即把b的高2个字节移下来显示。
printf("%ud\n%ld\n",b,c);
}
(int型占4个字节)。
a是int型,而且还是负数,在内存中用反码表示是32个1,即(11111111...)
b是unsigned int型,内存中是16个1(b取的是a的后半段,此时a的前半段仍然在内存中),但是编译器表示b是uint型的,所以当b作为uint型输出时,是一个最大的整数,即2^16 - 1。
c语言的long int和int在使用时我没发现他们的区别,不论从字节长度还是其他不同之处都没发现,暂且可以认为是一样的。
那么为什么结果都是-1呢?
问题就出在printf("%d\n%ld",b,c)上。代码中不难看出,编译器会把b当做int型的数输出,因为标注的是%d(%d表示int型),假设你把这句代码改为printf("%ud\n%ld",b,c),(%ud表示uint型),那么你就知道了。
#include<stdio.h>
main()
{
int a=-1,b,c;
b=(unsigned int)a;
c=(long int)a;
printf("%ud\n%ld\n",b,c);
b>>16;//位操作,表示二进制的b循环右移16位,即把b的高2个字节移下来显示。
printf("%ud\n%ld\n",b,c);
}
展开全部
在Turbo C环境下
long int长整型占32位
unsigned int无符号整型占16位
C程序中首先printf("%d\n%ld",b,c);改为printf("%u\n%ld",b,c);
-1在计算机中存储为16个1,a值强制转换为无符号型,直接将16个1赋值给b,则b=65535 c=-1
在VC环境下
unsigned int无符号整型占32位
b=4294967295 c=-1
long int长整型占32位
unsigned int无符号整型占16位
C程序中首先printf("%d\n%ld",b,c);改为printf("%u\n%ld",b,c);
-1在计算机中存储为16个1,a值强制转换为无符号型,直接将16个1赋值给b,则b=65535 c=-1
在VC环境下
unsigned int无符号整型占32位
b=4294967295 c=-1
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
两者最后输出的结果都是一样的,都是-1
运行结果确实都是-1,没错啊
运行结果确实都是-1,没错啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
unsigned int:无符号形
long int:长整形
long int:长整形
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询