+ -
当前位置:首页 → 问答吧 → 求解有符号数int16的二进制转换

求解有符号数int16的二进制转换

时间:2011-12-09

来源:互联网

16进制数 81 2C = 1000 0001 0010 1100

从左到右第一位1 表示负数
后面的值从二进制转换等300 


这里共两个字节
放到字节数组里为
byte b1 = 81
byte b2 = 2c

求如何位运算转换为10进制的300!
我已经试过将 BinaryReader.readint16
也试过将b1,b2放到byte[] 中再偿试BitConvert.toInt16
都是不行的。

只能求助各位大侠有没有位运算办法解决这个问题(其他办法,能解决也行)

作者: aolongxue   发布时间: 2011-12-09

其实我也不理解为什么第1位应该表示负数,但为何 结果却是300!!!!而不是-300!!!!!

这是为什么???

作者: aolongxue   发布时间: 2011-12-09

-300的16进制为7E 4D = 0111 1110 1101 0100

完全搞不懂了....0打头不是表示正数么?怎么这里却成负数了

作者: aolongxue   发布时间: 2011-12-09

计算机中整数是用补码表示的,而不是原码,参考http://baike.baidu.com/view/377340.htm

可以这样:
C# code
        int n = 0x812C;
        n = (~n | 0x8000) + 1;
        Response.Write(n);

输出:-300

作者: dalmeeme   发布时间: 2011-12-09

负数的补码=原码按位取反(除符号位)+1

作者: dalmeeme   发布时间: 2011-12-09