为什么65535的二进制为111.1111(16个1),111.1111(16个1)是-1的二进制?65535是2的16次方再减1,为什么就是16个一啊

来源:学生作业帮助网 编辑:六六作业网 时间:2024/11/17 05:54:02
为什么65535的二进制为111.1111(16个1),111.1111(16个1)是-1的二进制?65535是2的16次方再减1,为什么就是16个一啊为什么65535的二进制为111.1111(16

为什么65535的二进制为111.1111(16个1),111.1111(16个1)是-1的二进制?65535是2的16次方再减1,为什么就是16个一啊
为什么65535的二进制为111.1111(16个1),111.1111(16个1)是-1的二进制?
65535是2的16次方再减1,为什么就是16个一啊

为什么65535的二进制为111.1111(16个1),111.1111(16个1)是-1的二进制?65535是2的16次方再减1,为什么就是16个一啊
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 %u\n",a,a);
}