负数的二进制表示及有符号数与无符号数之间的转换
2015-10-26 22:30
453 查看
讲到有符号数与无符号数的转换,首先得说一下数字在计算中的二进制表示。无符号数表示相对简单,直接转换为二进制即可;有符号数则是将最高位作为符号位。所以对于单字节无符号数表示范围为:0~255;有符号数表示范围为:-128~127。 无符号数表示如下,对于a=3: 1字节表示为:0000 0011 4字节表示为:0000 0000 0000 0000 0000 0000 0000 0011 有符号数中正数表示方法与无符号数表示方式一样,而在计算机存储中,负数表示并不是简单地将正数二进制最高位用1表示,如符号数1000 0001并不是-1。而是用补码表示,a=-1: 1字节表示: 原码:1000 0001 反码:1111 1110 补码:1111 1111 4字节表示: 原码:1000 0000 0000 0000 0000 0000 0000 0001 反码:1111 1111 1111 1111 1111 1111 1111 1110 补码:1111 1111 1111 1111 1111 1111 1111 1111 所以-1在计算机存储中1字节和4字节二进制表示分别为:0xFF,0xFFFFFFFF。 1 无符号数转换为有符号数 看无符号数的最高位是否为1,如果不为1(即为0),则有符号数就直接等于无符号数;如果无符号数的最高位为1,则将无符号数取补码,得到的数就是有符号数。 无符号数 a=255,首位为1,表示负数,其余为按位取反, 单字节表示:1111 1111 按位取反 :1000 0000 加1得 :1000 0001 得到-1;所以无符号数255转换为符号数为-1。 2 有符号数转换为无符号数 看有符号数的最高位是否为1,如果不为1(即为0),则无符号数就直接等于有符号数;如果有符号数的最高位为1,则将有符号数取补码,得到的数就是无符号数。 将符号数-1转换为无符号数过程如下: 1000 0001 1111 1110 1111 1111 最终结果可得-1转换为无符号数255。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C与C++之间相互调用实例方法讲解
- 解析C++中派生的概念以及派生类成员的访问属性
- C++ Custom Control控件向父窗体发送对应的消息