整型与无符号整型 运算时值的转换

整型与无符号整型 运算时,系统会把整型转换为无符号整型

然后再进行运算,如果整型为负,则把负数的二进制补码直接

当成无符号的整型参加运算(即把符号位化为了最高值位。如:

-1的二进制补码为1111 1110,转换为无符号整型的话就是

1111 1110,转换为十进制就是254,然后用254进行运算)。


    printf("在mac 64位有符号的int 占%lu 字节\n",sizeof(int));
    printf("无符号的unsigned int 占%lu 字节\n",sizeof(unsigned int));//mac 64位
    
    unsigned int a=6;
    int b=-16;
    unsigned int c=a+b;//在运算时把int型的变量强制转换为unsigned的,然后再相加
    printf("a=%u b=%d c=%u\n",a,b,c);
    printf("(unsigned int )a = %u\n",(unsigned int)b);//把整型b强制转换为无符号型的
    
    a=16;
    b=-16;
    c=a+b;
    printf("a=%u b=%d c=%u\n",a,b,c);
 
    //    2^32-1=4294967295
    //    unsigned int 0~4294967295
    
    //    1000 0000 0000 0000 0000 0000 0001 0000//-16原码
    //    1111 1111 1111 1111 1111 1111 1110 1111//-16反码
    //    1111 1111 1111 1111 1111 1111 1111 0000//-16补码4294967280
    


输出:

mac 64位有符号的int 4 字节

无符号的unsigned int 4 字节

a=6 b=-16 c=4294967286

(unsigned int )a = 4294967280

a=16 b=-16 c=0



将一个二进制字符串转换无符号整型,首先需要明确二进制字符串的表示方式。二进制是一种由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。 通过按照上述步骤进行计算,即可将二进制字符串转换无符号整型
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值