#define fp_is_neg(val) ((((uint8_t*)&val)[3] & 0x80) != 0),这个函数的功能是....
答案:1 悬赏:40 手机版
解决时间 2021-01-18 05:23
- 提问者网友:听门外雪花风
- 2021-01-17 22:38
#define fp_is_neg(val) ((((uint8_t*)&val)[3] & 0x80) != 0),这个函数的功能是....
最佳答案
- 五星知识达人网友:醉吻情书
- 2021-01-17 23:45
我们可以倒着推到
fp_is_neg(val)应该只有两种值 布尔类型的 0 或者 1,这一点从 最后 != 这个是个判等符号 ,优先级是最低的 也就是最后执行一个符号 。
(uint8_t*)&val : 其中 &val是取val的地址 (uint8 *)&val c语言是没有uint8的 应该是自己定义的数据类型 字面意思 是个无符号8位整型 typedef unsigned char uint8 或者#define uint8 unsigned char . (uint8 *)&val 把变量val的地址作为一个指针变量
再看这句 ((uint8_t*)&val)[3] 很容易理解了 把指针当数组首地址用,((uint8_t*)&val)[3] 是数组的第4个元素
(((uint8_t*)&val)[3] & 0x80) 用数组的第3个元素 和 0x80(一个十六进制数)按位与预算,0x80的二进制10000000这应该是一个掩码 把低7位掩盖这样就能判断最高位是 1还是0了
如果((uint8_t*)&val)[3]中的数据最高位是 0 ,由于 0=0所以0((((uint8_t*)&val)[3] & 0x80) != 0) 这条语句为假c语言规定假也就是false 语句的值是0 也就是fp_is_neg(val) ==0,反之fp_is_neg(val) ==1.
若果我说的不对 ,求高手指点
fp_is_neg(val)应该只有两种值 布尔类型的 0 或者 1,这一点从 最后 != 这个是个判等符号 ,优先级是最低的 也就是最后执行一个符号 。
(uint8_t*)&val : 其中 &val是取val的地址 (uint8 *)&val c语言是没有uint8的 应该是自己定义的数据类型 字面意思 是个无符号8位整型 typedef unsigned char uint8 或者#define uint8 unsigned char . (uint8 *)&val 把变量val的地址作为一个指针变量
再看这句 ((uint8_t*)&val)[3] 很容易理解了 把指针当数组首地址用,((uint8_t*)&val)[3] 是数组的第4个元素
(((uint8_t*)&val)[3] & 0x80) 用数组的第3个元素 和 0x80(一个十六进制数)按位与预算,0x80的二进制10000000这应该是一个掩码 把低7位掩盖这样就能判断最高位是 1还是0了
如果((uint8_t*)&val)[3]中的数据最高位是 0 ,由于 0=0所以0((((uint8_t*)&val)[3] & 0x80) != 0) 这条语句为假c语言规定假也就是false 语句的值是0 也就是fp_is_neg(val) ==0,反之fp_is_neg(val) ==1.
若果我说的不对 ,求高手指点
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯