unsigned65535的int是多少,unsigned int 为65535 分别赋值给intfloat结果为
来源:整理 编辑:亚灵电子网 2023-01-02 09:47:39
本文目录一览
1,unsigned int 为65535 分别赋值给intfloat结果为
C语言int范围与平台有关,不同平台范围可能不同有的是16位,有的是32位,如果刚巧你那个平台int范围比较大32位,你赋值过去就还是原值65535(在可表示范围内);否则如果是16位的当然就是-1了。赋值给float应该还是原值,float范围比较大。int 9: char9 unsigned int9 float9.0 long int9 unsigned int 65535: char-1 (char为1字节,8个bit全为1)unsigned int65535 float65535.0 long int65535
2,unsigned int a65535 printfada 为什么输出为a1
难道你是用的TC?呃……你看看sizeof(int)是多少,现在都是4,所以int 和 long 一样。再说也该用%u输出呀!如果按2个字节算:65535=1111111111111111% 按%d(有符号) ,先最后十五位取反得000000000000000, 再加1得1,加上负号,所以就得-1.%d换成%u就行了,不然会把无符号数解释成有符号数unsigned 65535 在计算机中的二进制表示为16个1,这也是-1的补码表示形式
3,在C语言中unsigned int a65535 printfada 为
a的类型是不带不符号,也就是说有一个变量为a的box中装入了一个数据,而printf中的%d又将a作为带符号数显示,在其他未明确指出时,a显示是一个不带符号数,而你使用了%d要求将a作为带符号数显示,那么显然显示的结果是-1,也就是说,如果a=95,printf("a=%c",a);则会显示成字符a呢!在16位的C编译器中,unsigned int a=65535;存储形式为16位全1。而当它以16位有符号整数格式解读时,因为其最高位为1,于是按16位补码被解读为一个负数-1。unsign int 的65535和,int型的-1,在内存中的,存储格式是一样的。你用%u,输出就是65535了。似乎,是用补码存储的。你可查相关资料,还没懂欢迎追问。65535二进制应该是全1或者说全F,-1在有符号数中表示就是全F-1 的二进制表示最高位为1(符号位,为1表示负),最低位为1内存表示是补码,即原码取反加1,取反符号位不变,就变成了最高位为1最低位为0中间全为1,再加上1,就全为1了我说明白了吧65535二进制应该是全1或者说全F,-1在有符号数中表示就是全F-1 的二进制表示最高位为1(符号位,为1表示负),最低位为1内存表示是补码,即原码取反加1,取反符号位不变,就变成了最高位为1最低位为0中间全为1,再加上1,就全为1了我说明白了吧再看看别人怎么说的。
4,unsigned int b65535printfdb的结果为什么是1啊
主要问题是出在输出控制上,因为你定义的是无符号整数因此16位都用来表示数值,没有符号位,但是你输出处用%d是不对的,%d是用来输出有符号整型数的。因此会将b的值以有符号的形式输出。而65536这个值在16位有符号整数表示中正好是-1.现在基本都是用32位表示整型数了,因此这样写,不会在32位编译系统中发错误。语言有符号数与无符号数之间的转换:无符号数:不存在正负之分,所有位都用来表示数的本身。有符号数:最高位用来表示数的正负,最高位为1则表示负数,最高位为0则表示正数。1. 无符号数转换为有符号数:看无符号数的最高位是否为1,如果不为1(即为0),则有符号数就直接等于无符号数;2.如果无符号数的最高位为1,则将无符号数取补码,得到的数就是有符号数。3..有符号数转换为无符号数 :看有符号数的最高位是否为1,如果不为1(即为0),则无符号数就直接等于有符号数;4.如果有符号数的最高位为1,则将有符号数取补码,得到的数就是无符号数。在无符号整型中表示65535,其二进制数是1111 1111 1111 1111.而转化为有符号的话,1111 1111 1111 1111表示的数是多少呢。我们知道,在有符号的时候,负数的表示是原码取反加1.那么我们来反推1111 1111 1111 1111等于多少。首先因为最高为是1,所以1111 1111 1111 1111表示的是负数,那么1111 1111 1111 1111-1= 1111 1111 1111 1110,再取反,得到1000 0000 0000 0001=-1(符号位不变其他位置按位取反)所以1111 1111 1111 1111 是-1.主要问题是出在输出控制上,因为你定义的是无符号整数因此16位都用来表示数值,没有符号位,但是你输出处用%d是不对的,%d是用来输出有符号整型数的。因此会将b的值以有符号的形式输出。而65536这个值在16位有符号整数表示中正好是-1.现在基本都是用32位表示整型数了,因此这样写,不会在32位编译系统中发错误。在无符号整型中表示65535,其二进制数是1111 1111 1111 1111.而转化为有符号的话,1111 1111 1111 1111表示的数是多少呢。我们知道,在有符号的时候,负数的表示是原码取反加1.那么我们来反推1111 1111 1111 1111等于多少。首先因为最高为是1,所以1111 1111 1111 1111表示的是负数,那么1111 1111 1111 1111-1= 1111 1111 1111 1110,再取反,得到0000 0000 0000 0001.所以1111 1111 1111 1111 是-1.所以输出结果是-1.请高手指点。你想输出无符号整形应该修改成unsigned int b=65535;printf("%u”,b);
文章TAG:
unsigned65535的int是多少多少 unsigned int