16位二进制有符号整数的表示范围是—32768到32767(共65535个数),这里面的—32768是如何算的?详细点,有过程最好。。谢谢
困,头晕的很,哥们,谢谢,明天再看看
哥们,懂PLC吗
看头晕
什么原码呀,反码呀,补码呀,晕
追答原反补码之间在呢么转换你不清楚的话这个估计是有点难以理解,楼下说得也对,16位嘛,0000 0000 0000 0000 ~ 1111 1111 1111 1111,也就是就是 0~65535,既然有正有负,那就正负各占一半,让第一位表示符号,第一位为1就是负数,为0就是正数,这样正负数就各占一半了,分别是正的0~32767和负的0~32767,问题来了,正0和负0是一样的,没有必要用两个二进制形式去表示,所以让原本的-0,也就是1000 0000 0000 0000去表示-32768。
追问困,头晕的很,哥们,谢谢,明天再看看
追答你非要搞懂这个的话,你就需要了解原反补码,这个百度一下会有很多资料的
追问哥们,你说的后面我有点疑惑,你说的“所以让原本负0,也就是1000000000000000去表示-32768”,这里有点不懂?还有你说让原本的负0去表示,那数值结果(也就是-32768)跟原来不让负0去表示的数值(也就是-32767吧),最终结果的数值意义不是改变了吗??
满意答复,给你采纳
追答现在有两个二进制可以表示0,一个是0000 0000 0000 0000,还有一个是1000 0000 0000 0000,但是有必要用两个去表示一个数吗?用0000 0000 0000 0000去表示0就好了嘛,用到0的地方就是0000 0000 0000 0000。那这个1000 0000 0000 0000不能浪费了啊,总得表示一个数吧,于是人为规定它表示-32768
追问1000000000000000等于-32768?
追答这是Java运行结果,使用short是因为short变量大小正好为2个字节,即你这里的16位。以二进制形式为a变量赋值,由于Java默认整数数值类型为int,不强制类型转换的话这个数的第一位将不是符号位,表示数为32768,超出了short范围,故进行了强制类型转换操作,输出结果是-32768.
这是C语言,用Visual Studio调试的一个截图,同样使用short类型变量,这次将它赋值为-32768,在控制台输出变量地址,在内存窗口输入得到的内存地址,以二字节整数16进制形式显示,可以看到是8000,一个16进制位等价于4个二进制位,16进制的8000也就相当于二进制的1000 0000 0000 0000.你要是还有什么疑问,我真的是没招了
不懂—1~—32768
追答2进制最大数如下
1111 1111 1111 1111
(规定)把最高位看做+、-号
+111 1111 1111 1111 2^15-1 =32767
-111 1111 1111 1111 -2^15 =-32768
为什么正数要减一,要这么理解,计算机语言中计数是从0开始的.