关于C++中有符号整型和无符号整型的转换方法

浪尽此生 提交于 2020-02-09 18:24:18

首先举个c++代码,如下:

#include <iostream>
using namespace std;
 
/* 
 * 这个程序演示了有符号整数和无符号整数之间的差别
*/
int main()
{
   short int i;           // 有符号短整数
   short unsigned int j;  // 无符号短整数

   j = 50000;

   i = j;
   cout << i << " " << j;

   return 0;
}

输出结果为:

-15536 50000

转换方法(以16位二进制为例):

(1) 有符号十进制整型→无符号十进制整型

将有符号十进制整数转换二进制,由于最高位为符号位,此时将符号位按数据位进行转换,转换的十进制数即为无符号整型数。

注意:负数的二进制是最高位为符号位,其余位为绝对值的补码(绝对值原码取反+1),0011,1100,1011,0000(绝对值原码),1100,0011,0101,0000(取反加1,最高位为1),该二进制为-15536的二进制表示。现将二进制所有位视为数据位转换十进制,即得50000。

(2) 无符号十进制整型→有符号十进制整型

将无符号十进制整数转换成二进制,减1并按位取反,然后转换成十进制。

举例:

无符号整型数 50000,其二进制为‭1100,0011,0101,0000‬,最高位为1,因此转换后的有符号整型数为负数,其余位视为整体,减1并按位取反得到011,1100,1011,0000,转换十进制数即为-15536。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!