为什么65535的二进制为111....1111(16个1),111....1111(16个1)是-1的二进制?
4个回答
展开全部
2^16=65536,2^16-1=65535这没有错啊!111....1111(16个1)是-1的二进制也没错,但这是在int型为2字节的时候。当int型为2字节时,能表示的有符号数的范围是-32768~32767,表示无符号数时范围是0~65535。现在的int型已大都为4字节了,你困惑的这个问题已转移到更大的数上去了。其实计算机里没有什么正数、负数,都是些0、1符号,代表什么数看编程者怎么对待了。就说这111....1111(16个1),在16位整型平台下,编程者如果认为是无符号数,那就是65535,而如果编程者认为是有符号的,那就是-1了。所以不要困惑。
如果你是学C的,用下面的语句来理解我上面的回答——
#include "stdio.h"
void main(void){
int a=0xFFFF;//这就是16个1
printf("%d %u\n",a,a);
}
如果你是学C的,用下面的语句来理解我上面的回答——
#include "stdio.h"
void main(void){
int a=0xFFFF;//这就是16个1
printf("%d %u\n",a,a);
}
追问
就是为什么2^16-1=65535,65535的二进制就是111....1111(16个1),-1的二进制是111....1111(16个1),算法规则是什么啊,谢谢
追答
用2除,反向取余数,就把十进制变成二进制了——
65535÷2 = 32767 余 1
32767÷2 = 16383 余 1
16383÷2 = 4095 余 1
4095÷2 = 2047 余 1
2047÷2 = 1023 余 1
1023÷2 = 511 余 1
511÷2 = 255 余 1
255÷2 = 127 余 1
127÷2 = 63 余 1
63÷2 = 31 余 1
31÷2 = 15 余 1
15÷2 = 7 余 1
7÷2 = 3 余 1
3÷2 = 1 余 1
1÷2 = 0 余 1
反向取余数:11111111 11111111。
至于-1的也是11111111 11111111的“来历”:
16位表示-1的原码是10000000 00000001,那个最高位上的1是表示负数的称号。计算机中都是用补码表示的,求补码的办法之一是:先求其反码,再加1;反码求法是除符号位外各位取反:11111111 11111110,求补码再加1,即是11111111 11111111。这就是-1在计算机中的16位二进制表示。
展开全部
65535=FFFF (16个1)=2^16-1
减1的原因,是因为16进制从0开始计数,而2^16是从1开始计数(即2^0=1),两者相差1。
减1的原因,是因为16进制从0开始计数,而2^16是从1开始计数(即2^0=1),两者相差1。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1*1=1
11*11=121
111*111=12321
1111*1111=1234321
规律,乘数和被乘数有n个1,乘积就以1为增量由1开始依次递增到n,再依次递减到1,如:如果是5个1的话,11111*11111=123454321;如果是6个1,111111*111111=12345654321,但是超过10个1就不好说了。
11*11=121
111*111=12321
1111*1111=1234321
规律,乘数和被乘数有n个1,乘积就以1为增量由1开始依次递增到n,再依次递减到1,如:如果是5个1的话,11111*11111=123454321;如果是6个1,111111*111111=12345654321,但是超过10个1就不好说了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
65535是2的16次方再减1,为什么就是16个一啊
65535=FFFF (16个1)
F=1111
65535=FFFF (16个1)
F=1111
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |