短整型为什么最大值和最小值是那样的?
短整型二进制长是16位,最大值是2的15次方-1,最小值是负的2的15次方,我不懂的是10000000000000000(17位)减去1,然后是16个1,那么就是2的16...
短整型二进制长是16位,最大值是2的15次方-1,最小值是负的2的15次方,我不懂的是10000000000000000(17位)减去1,然后是16个1,那么就是2的16次方减一啊,最小值是0111111111111111,是2的15次方减一,可是这显然与正确答案不同,请详细讲下错在哪儿,正码,反码,补码是什么,谢谢了二进制不是最高位0是负数(被4和或者8整除位数,不够的用0补充),1是整数,为什么说机器的原码(0为正,1为负》小弟刚学C语言,求指教~~
展开
2个回答
展开全部
我给你说说:
短整型占两个字节,一个字节8位,也就是16位。0000 0000 0000 0000 最低位是0位,最高位是15位。0--15正好是16位,明白吗?
无符号数:这16位都表示数字,最大是:二进制:1111 1111 1111 1111 十六进制:FFFF
十进制是:65535;有许多人都糊涂,2的16是65536啊;不错,但不是这个意思,它是指2个字节共16位是指能表示65536个数,我们是说的是16位能表示的最大数是65535,从0到65535正好是65536个数,明白了吗?比如一个4位数:0000 是0,1111是15,也就是说4位表示的最大数是15,不是2的4次方16,
有符号数:最高位是符号位,只能有15位表示数值,能表示32768个数,正数是0至32767这32768个数,负数是-1到-32768这32768个数,二进最高位是0表示正数,是1表示负数。
一般在计算机中,数是用补码表示,无符号数的补码就是原码,比如:在计算机中存放的是1101 0010 1101 1000 的数值,直接用二进制转化成十进制的方法算 是:53976
有符号数的补码是原码的反码末位加1,就是对二进制数按位取反,末位再加1,就是有符号数的补码。(补码的补码就是原码,求这个补码的原码就是对补码再进行求补码)比如;还是上面二进制数1101 0010 1101 1000 ,但这是有符号数的补码,我们必须先求出它的原码 ,按位取反,符号位不变,也不参与二进制转换十进制的计算:1010 1101 0010 0111 ,末位加1是:
1010 1101 0010 1000,十进制是:-11560;
再比如有符号数:1111 1111 1111 1111 先求原码,符号位不变,是:1000 0000 0000 0000
末位加1,原码是:1000 0000 0000 0001 所以十进制是-1;
至于机器的原码(0为正,1为负)呵呵,就是这样规定的啦。
短整型占两个字节,一个字节8位,也就是16位。0000 0000 0000 0000 最低位是0位,最高位是15位。0--15正好是16位,明白吗?
无符号数:这16位都表示数字,最大是:二进制:1111 1111 1111 1111 十六进制:FFFF
十进制是:65535;有许多人都糊涂,2的16是65536啊;不错,但不是这个意思,它是指2个字节共16位是指能表示65536个数,我们是说的是16位能表示的最大数是65535,从0到65535正好是65536个数,明白了吗?比如一个4位数:0000 是0,1111是15,也就是说4位表示的最大数是15,不是2的4次方16,
有符号数:最高位是符号位,只能有15位表示数值,能表示32768个数,正数是0至32767这32768个数,负数是-1到-32768这32768个数,二进最高位是0表示正数,是1表示负数。
一般在计算机中,数是用补码表示,无符号数的补码就是原码,比如:在计算机中存放的是1101 0010 1101 1000 的数值,直接用二进制转化成十进制的方法算 是:53976
有符号数的补码是原码的反码末位加1,就是对二进制数按位取反,末位再加1,就是有符号数的补码。(补码的补码就是原码,求这个补码的原码就是对补码再进行求补码)比如;还是上面二进制数1101 0010 1101 1000 ,但这是有符号数的补码,我们必须先求出它的原码 ,按位取反,符号位不变,也不参与二进制转换十进制的计算:1010 1101 0010 0111 ,末位加1是:
1010 1101 0010 1000,十进制是:-11560;
再比如有符号数:1111 1111 1111 1111 先求原码,符号位不变,是:1000 0000 0000 0000
末位加1,原码是:1000 0000 0000 0001 所以十进制是-1;
至于机器的原码(0为正,1为负)呵呵,就是这样规定的啦。
展开全部
短整型二进制长是16位, 最高位用作符号位,所以表示数值的只有15位。
最大值是正值,符号位是0,最大数值是2的15次方-1。
负数,符号位是1。剩下15位表示数值。
最小值,原码 是 全1。 即 1111 1111 1111 1111
负数用补码表示,补码等于(不计符号位)反码加1。
原码 1111 1111 1111 1111
反码 x 000 0000 0000 0000, 反码加1 = x 000 0000 0000 0001
补码 1000 0000 0000 0001.
这个 补码 的16进制是 0x8001
用c程序你可以输出看数值:
short x= 0x8001;
printf("%d",x); // -32767
计算机负数用补码的目的是,减法可以用加法器(硬件)来做,(减一个数,等于加一个负数),速度快。
最大值是正值,符号位是0,最大数值是2的15次方-1。
负数,符号位是1。剩下15位表示数值。
最小值,原码 是 全1。 即 1111 1111 1111 1111
负数用补码表示,补码等于(不计符号位)反码加1。
原码 1111 1111 1111 1111
反码 x 000 0000 0000 0000, 反码加1 = x 000 0000 0000 0001
补码 1000 0000 0000 0001.
这个 补码 的16进制是 0x8001
用c程序你可以输出看数值:
short x= 0x8001;
printf("%d",x); // -32767
计算机负数用补码的目的是,减法可以用加法器(硬件)来做,(减一个数,等于加一个负数),速度快。
更多追问追答
追问
最小值不是负的2的15次方吗,结果不应该是-32767,还有-7的二进制应该是1111,反码1000,补码是1001?然后又该怎么办,使减一个数,等于加一个负数,减去-7该怎么变
追答
是的,最大负数 用 补码 写出 是 short x= 0x8000; 得 -32768
用原码写不出来,按原码能写的(全1),转换后 只能 得-32767。
-7的二进制,用 short int 原码是 1000 0000 0000 0111,不是 1111
反码 x111 1111 1111 1000.
补码是 1111 1111 1111 1001.
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询