为什么signed int取值范围是-32768 ~ 32767,该如何处理
为什么signed int取值范围是-32768 ~ 32767
问个很小白的问题=。=
就拿4位打个比方。
因为是signed int,所以【首位应该是符号位】 PS:这就是问题核心所在
除去首位后,4位数就剩下3个位了
000-111 就代表着0到7
加上符号位后, 0000-1111 不是应该是 -7到7么?可结果是-8到7?
我猜想问题是出在符号位的1000,
我原本以为,0000代表整数的0,1000代表负数的0【因为0没有分正负,那么0000和1000应该代表的都是0】
可为什么取值范围是-8到7呢?除非1000代表的不是0而是-8,如果是这样的话,那么首位的1还算是符号位么?既然代表的是符号,怎么又用来算数呢???
------解决方案--------------------
1111
1110
1101
1100
1011
1001
1010
1000
这不是8个负数么
------解决方案--------------------
负数是用补码表示的
------解决方案--------------------
-1是0xFFFF而不是0x8001
------解决方案--------------------
1000看成补码就是-8
------解决方案--------------------
问个很小白的问题=。=
就拿4位打个比方。
因为是signed int,所以【首位应该是符号位】 PS:这就是问题核心所在
除去首位后,4位数就剩下3个位了
000-111 就代表着0到7
加上符号位后, 0000-1111 不是应该是 -7到7么?可结果是-8到7?
我猜想问题是出在符号位的1000,
我原本以为,0000代表整数的0,1000代表负数的0【因为0没有分正负,那么0000和1000应该代表的都是0】
可为什么取值范围是-8到7呢?除非1000代表的不是0而是-8,如果是这样的话,那么首位的1还算是符号位么?既然代表的是符号,怎么又用来算数呢???
------解决方案--------------------
1111
1110
1101
1100
1011
1001
1010
1000
这不是8个负数么
------解决方案--------------------
负数是用补码表示的
------解决方案--------------------
-1是0xFFFF而不是0x8001
------解决方案--------------------
1000看成补码就是-8
------解决方案--------------------