十六进制转十进制(两个字节,最高位为符号位)

本文介绍如何使用C、Java和Delphi三种语言将十六进制数0xFD67转换为对应的负十进制数-665。通过逐个步骤详细解释了从清除符号位、求反码、清除多余位到加1和确定符号位的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求:将0xFD67转换为-665

1、语言:C

#include <stdio.h>

int main(int argc, char *argv[]) {
    int a = 0xFD67;
    printf("a=%d\n", a); 

    //清除符号位
    int b = a & 0x7FFF;

    printf("b=%d\n", b); 

    //反码
    int c = ~b;
    printf("c=%d\n", c);   
    
    //清除左边多余位
    int d = c & 0x7FFF;
    printf("d=%d\n", d);

    //加1
    d = d + 1;

    //符号位
    int e = d * -1;
    printf("e=%d\n", e);

    return 0;
}

结果:

a=64871
b=32103
c=-32104
d=664
e=-665

2、语言:java

public class Msbbit {

	public static void main(String[] args) {
		int a = 0xFD67;
		System.out.println("a=" + a + " (0x" + Integer.toHexString(a).toUpperCase() + ")");
		
		int b = a & 0x7FFF;
		System.out.println("b=" + b + " (0x" + Integer.toHexString(b).toUpperCase() + ")");	
		
		int c = ~b;
		System.out.println("c=" + c);	
		
		int d = c & 0x7fff;
		System.out.println("d=" + d);	
		
		int e = d + 1;
		System.out.println("e=" + e);	
		
		int f = e * -1;
		System.out.println("f=" + f);			
		
	}
}

结果:

a=64871 (0xFD67)
b=32103 (0x7D67)
c=-32104
d=664
e=665
f=-665

3、语言:delphi

function NegativetoInt(const s: Integer): Integer;
var
  a: Integer;
  b: Integer;
  c: Integer;
  d: Integer;
begin
  a := s and $7FFF;
  b := not a;
  c := b and $7FFF;
  d := c + 1;
  Result := d * -1;
end;

~~~~~~~~~~~~~~~

do one thing, do it better 

转载于:https://my.oschina.net/yunnet/blog/1541094

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值