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

首先举个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。

将一个二进制字符串转换无符号整型,首先需要明确二进制字符串的表示方式。二进制是一种由0和1组成的数字系统,每一位表示一个2的幂次。例如,二进制数1010表示10,其中第一位表示2^3,第二位表示2^2,第三位表示2^1,第四位表示2^0。因此,可以通过对每位进行计算,并将结果相加得到最终的无符号整型值。 要将二进制字符串转换无符号整型,可以使用以下步骤: 1. 首先,获取二进制字符串的长度。 2. 创建一个变量,用于存储最终的无符号整型值,初始值设为0。 3. 从左到右遍历二进制字符串,从最高位开始。 4. 对于每一位,将其与相应的权值相乘。 5. 将乘积与无符号整型值累加,得到新的无符号整型值。 6. 继续遍历下一位。 7. 重复步骤4至6,直到遍历完所有位。 8. 返回最终的无符号整型值。 举例来说,假设有一个二进制字符串"1010",按照上述步骤进行转换: 1. 字符串长度为4。 2. 创建变量unsigned_value,并将其设为0。 3. 遍历字符串,由左至右。 4. 第一位是1,与2^3相乘得到8。 5. 将乘积8与unsigned_value累加,得到新的unsigned_value为8。 6. 继续遍历下一位。 7. 第二位是0,与2^2相乘得到0。 8. 将乘积0与unsigned_value累加,unsigned_value保持不变。 9. 继续遍历下一位。 10. 第三位是1,与2^1相乘得到2。 11. 将乘积2与unsigned_value累加,得到新的unsigned_value为10。 12. 继续遍历下一位。 13. 第四位是0,与2^0相乘得到0。 14. 将乘积0与unsigned_value累加,unsigned_value保持不变。 15. 遍历完所有位,返回最终的unsigned_value为10。 通过按照上述步骤进行计算,即可将二进制字符串转换无符号整型
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值