首先举个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。
来源:CSDN
作者:memory丶ysu
链接:https://blog.csdn.net/xiangyi520/article/details/104212254