展开全部
在内存中,正数的原码和补码是一样的,而负数的补码为其绝对值的原码按位取反后加1.
对于补码是0000000000000000时,对应的值为0
补码范围是0000000000000001-0111111111111111,对应的值为全部正整数,即1-2^15-1.
补码范围是1000000000000001-1111111111111111,对应的原码是100000000000001-111111111111111,值的范围是-1~-(2^15-1)。
还有一个数是100000000000000,它不能使用补码计算公式进行计算的。是计算机内部直接用它来表示-2^15
对于补码是0000000000000000时,对应的值为0
补码范围是0000000000000001-0111111111111111,对应的值为全部正整数,即1-2^15-1.
补码范围是1000000000000001-1111111111111111,对应的原码是100000000000001-111111111111111,值的范围是-1~-(2^15-1)。
还有一个数是100000000000000,它不能使用补码计算公式进行计算的。是计算机内部直接用它来表示-2^15
更多追问追答
追问
0111 1111 1111 1111求出来是2^15-1,是最大的取值,能否在此二进制码中的0换为1,编程负的最小值,然后按照求解补码,取反加1来得出其范围中的最小值?
追答
不明白你的意思。
或者你看看这个:
计算机中采用二进制补码存储数据,即正数编码不变,从0000000000000000到
0111111111111111依旧表示0到32767,而负数需要把除符号位以后的部分取反加1,即-32767的补码为1000000000000001。
到此,再来看原码的正0和负0:0000000000000000和1000000000000000,补码表示中,前者的补码还是0000000000000000,后者经过非符号位取反加1后,同样变成了
0000000000000000,也就是正0和负0在补码系统中的编码是一样的。但是,我们知道,16位二进制数可以表示216个编码,而在补码中零的编码只有一个,也就是补码中会比原码多一个编码出来,这个编码就是1000000000000000,因为任何一个原码都不可能在转成补码时变成1000000000000000。所以,人为规定1000000000000000这个补码编码为-32768。 所以,补码系统中,范围是-32768~32767。
因此,实际上,二进制的最小数确实是1111111111111111,只是二进制补码的最小值才是1000000000000000,而补码的1111111111111111是二进制值的-1。
展开全部
1、谁告诉你int类型一定占用2个字节的??
C99标准规定 Long型占用4个字节,Short占用2个字节,而Int类型的规定是大于等于Short,小于等于Long,所以Int类型根据不同的编译器,即有可能是4个字节,也有可能是2个字节
2、在来说取值范围
一个字节有8位,而每一位有0、1两种状态
如果是两个位,就有
0 0,0 1,1 0,1 1;一共4种状态,对应 0 1 2 3 ,也就是2^2
如果是三个位,就有
0 0 0,0 0 1,.........,具体我就不列举,一共8种,也就是2^3
所以,如果是1个字节,8位,就是2^8 = 256
,如果是2个字节,16位,就是2^16 = 65536
如果把最高位0看作正,1看作负,那么2个字节的取值范围就是你所知道的范围了
C99标准规定 Long型占用4个字节,Short占用2个字节,而Int类型的规定是大于等于Short,小于等于Long,所以Int类型根据不同的编译器,即有可能是4个字节,也有可能是2个字节
2、在来说取值范围
一个字节有8位,而每一位有0、1两种状态
如果是两个位,就有
0 0,0 1,1 0,1 1;一共4种状态,对应 0 1 2 3 ,也就是2^2
如果是三个位,就有
0 0 0,0 0 1,.........,具体我就不列举,一共8种,也就是2^3
所以,如果是1个字节,8位,就是2^8 = 256
,如果是2个字节,16位,就是2^16 = 65536
如果把最高位0看作正,1看作负,那么2个字节的取值范围就是你所知道的范围了
追问
纠正一下你的小疏忽,0 0 ,0 1,1 0 ,1 1;共有4中状态不错,但是其取值是0到3,可以写为0到2^2-1。您能否把最高位是0时为正,1为负这种情况下,接着说其取值范围的情况?
追答
我们一般说的Int类型都是带正负的,也就是最高位用来标记正负
如果最高不用来标记正负,就是正整数,就应该带上unsigned关键字
也就是 unsigned int 类型
对于2位来说,如果是unsigend,前面已经说清楚了
如果第2位用来标记正负
0 0 仍然是0
0 1 让然是1
那么正数的范围 就是 0~2^(2-1)-1
1 0 人为规定 -2 = -2^(2-1)
1 1 是-1
这个涉及到补码的知识,当最高位为1,其他位为0的时候,就代表那个最小的负整整
1000 0000 就是-2^(8-1)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询