unsigned 无符号整数做差 及 二进制运算 学习记录

博客讨论了无符号整数做差时的计算机内部补码运算原理,通过举例说明了50减去100的过程,并解释了为什么在某些情况下无符号整数减法可能导致意外结果。建议在编程时避免使用无符号类型进行减法运算,以防止潜在的问题。
摘要由CSDN通过智能技术生成

在这里插入图片描述

上下两部分结果不同, 很神奇吧 ?

查阅头文件发现, strlen 返回值 是 size_t 类型的, 就是 usigned long long 类型, 两者做差是不同的.

所以写程序的时候就尽量避免 减法运算, 比如比较 a-5 和 b 的大小
if ( a-5 > b ) 就尽量写成 if ( a > b+5 )
当然, 这是对于无符号类型来说
在这里插入图片描述

我们来打破砂锅问到底, 这里就涉及 无符号整数做差的 问题,

计算机内部运算全都是补码运算, 我们来举个例子 50 + 100

50 的二进制补码是:   00000000|00000000|00000000|00110010
100的二进制补码是:  00000000|00000000|00000000|01100100
4294967246的补码是   11111111|11111111|11111111|11001110

50 - 100, 就是 50 + (-100)

50 的二进制补码是:   00000000|00000000|00000000|00110010
100的二进制原码是:  00000000|00000000|00000000|01100100
100的二进制补码是:  11111111|11111111|11111111|10011011

-50的二进制原码是:   11111111|11111111|11111111|10010110    

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值