0x7fffffff解析

0x7fffffff 表示 int的最大值
0x表示是16进制
7 表示二进制 0111
F 表示二进制 1111
0x7FFFFFFF 就表示 是一个十六进制的int的最大值
也可以表示为二进制的 0111 1111 1111 1111 1111 1111 1111 1111
这是最大的整型数 int(因为第一位是符号位,0 表示他是正数)

每个十六进制数占4个bit(毕竟16进制最大值是15嘛),一个字节占8位。因此0x7ffffff应该理解为:
0x7f ff ff ff ff,也就是占4个字节,也就是一个int类型。

用 INT_MAX 常量可以替代这个值。

int的范围是“-231”到“231-1”

至于这里为什么是2^31-1 ,这里减一的原因是大家回想一下二进制转十进制的转法中:二进制1111转成十进制23+22+21+20 = 15 如果你直接用24得出的数是16(这里的意思是可以有16个数),然而1111最大能表达的十进制整数是15,所以24-1=15,也就说最大的整数是15。所以2^31-1这里是可以表示的最大整数了!

也就是“-2147483648”到“2147483647”;

关于int的范围是“-231”到“231-1”; 可以看看这篇https://blog.csdn.net/shihengli2010/article/details/51821827

与计算
例如: -1 & 0x7fffffff
计算
0111 1111 1111 1111 1111 1111 1111 1111 0x7fffffff
1000 0000 0000 0000 0000 0000 0000 0001 -1
等于
0000 0000 0000 0000 0000 0000 0000 0001 1

  • 8
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这段代码的作用是从寄存器地址0x000B读取数据,将读取的数据转换为浮点数,并将结果打印出来。 具体的代码解析如下: 1. `RN7302_Read(0x000B, k);`:这行代码调用了一个函数`RN7302_Read`,用于从寄存器地址0x000B读取数据,读取的数据会保存在数组`k`中。 2. `num0 = ((0x00000000 | k[0] << 24 | k[1] << 16 | k[2] << 8 | k[3]) & 0x0fffffff) / 160;`:这行代码将读取的数据转换为浮点数。具体的转换过程如下: - `0x00000000 | k[0] << 24`:将`k[0]`左移24位,再与0x00000000进行或运算,得到一个32位的无符号整数。 - `k[1] << 16`:将`k[1]`左移16位,得到一个32位的无符号整数。 - `k[2] << 8`:将`k[2]`左移8位,得到一个32位的无符号整数。 - `k[3]`:得到一个32位的无符号整数。 - `|`:将上述四个32位的无符号整数进行或运算,得到一个32位的无符号整数。 - `& 0x0fffffff`:将上述的32位无符号整数与0x0fffffff进行与运算,得到一个30位的无符号整数。 - `/ 160`:将上述的30位无符号整数除以160,得到一个浮点数。 3. `printf("IA_Reg=%02x%02x%02x%02x IA =%.3f \r\n",k[0],k[1],k[2],k[3],num0/1000.000);`:这行代码将转换后的浮点数打印出来。具体的打印格式如下: - `%02x`:以16进制形式打印一个无符号整数,不足两位用0填充。 - `%.3f`:以浮点数形式打印一个数值,保留3位小数。 - `\r\n`:打印一个回车符和一个换行符,用于换行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值