为什么65535的二进制为111.1111(16个1),111.1111(16个1)是-1的二进制?

为什么65535的二进制为111.1111(16个1),111.1111(16个1)是-1的二进制?
65535是2的16次方再减1,为什么就是16个一啊
zhuangwf 1年前 已收到1个回答 举报

涡轮不增压 幼苗

共回答了15个问题采纳率:93.3% 举报

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){
x09int a=0xFFFF;//这就是16个1
x09printf("%d %un",a,a);
}

1年前 追问

5

zhuangwf 举报

就是为什么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位二进制表示。
可能相似的问题
Copyright © 2024 YULUCN.COM - 雨露学习互助 - 17 q. 0.444 s. - webmaster@yulucn.com