LeetCode 7-整数反转(Java版)

这篇博客详细解释了正数和负数在计算机中的原码、反码和补码表示,指出系统中二进制通常以补码形式存在。同时,讨论了Java中无符号右移(>>>)和带符号右移(>>)的区别,并提供了处理正负数转换的代码示例,确保在数值操作中避免溢出。此外,提出了将正数转换为负数处理的策略,以扩大可表示的绝对值范围。
摘要由CSDN通过智能技术生成
1.正数和负数中原码、反码、补码的区别

原码:正数的符号位为0,负数的符号位为1

反码(基于原码变动):正数的反码跟原码相同负数的反码,除了符号位,其他全部取反

补码(基于反码变动):正数的补码,就跟原码、反码都相同负数的补码,在其反码的基础上,加1

注:系统中二进制均以补码形式存在。

2.Java中>>> 和 >> 的区别

1) >>> 表示不带符号向右移动二进制数,移动后前面统统补0;
2) >> 表示带符号向右移动二进制数 ,正数右移高位补0,负数右移高位补1
:带符号和不带符号,是指用不用符号位来补。但是符号位都是跟着动的。

3.思路

惯用做法:把传进来的正数转变成负数处理,
因为负数可以表达的绝对值域比正数表达的绝对值域大一个

4.代码
public static int reverse(int x) {
		//判断数值的正负
		boolean judge = ((x >>> 31) & 1) == 1;
		//把正数转成负数处理
		x = judge ? x : -x;
		int minc = Integer.MIN_VALUE / 10;
		int miny = Integer.MIN_VALUE % 10;
		int res = 0;
		while (x != 0) {
			//检测溢出
			if (res < minc || (res == minc && x % 10 < miny )) {
				return 0;
			}
			res = res * 10 + x % 10;
			x /= 10;
		}
		return judge ? res : Math.abs(res);
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值