比较负整数和正整数的字节数组值

问题描述

我对 C++ 非常陌生,尤其是有符号和无符号转换。目前我正在做一个练习,如果它在两个值(一个最小值和一个最大值)之间,我需要比较一个值。

例如

最小值 = -319 - 它的字节数组(int8)将为 {254,193}

最大值 = 400 - 它是字节数组(int8){1,144}

假设要比较的值是-200 {255,56},这应该是有效的,但我无法正确获取

假设比较值、最小值和最大值字节与 255 个无符号掩码字节进行 AND 运算,然后将其存储在 int8 字节中,然后在最小值和最大值之间进行比较。由于符号位,我很困惑,无法正确进行比较,但对于所有正值都可以正常工作。

我尝试的方法是,

首先我尝试将 int8_t 转换为 int16_t

int16_t compare = (int16_t)(inp[i] & 0xFF);

int16_t minVal = (int16_t)(minimum[i] & 0xFF);

int16_t maxVal = (int16_t)(maximum[i] & 0xFF); return (compare>=minVal&&compare<=maxVal)

第二种方法是我在掩码字节中将 0 设置为 MS 位,然后比较每个字节,因为我认为不需要与该位进行比较,但我不确定它是否正确,因为数据可能会出错。>

第三次尝试是在比较时将 MS 位设置为 0。我试过了,这也是失败的。

请告诉我如何在这种情况下进行比较。谢谢

为了澄清这个问题,我得到了一个三个 2 元素的字节数组,如果值字节数组介于最小和最大字节数组之间,该函数将返回 true。

所以上面的比较算法是在 for 循环中运行的:

bool isValueInBetween(uint8_t* min,uint8_t* max,uint8_t* val){
   bool is_match = true;
   for(int i = 0; i < 2; i++){
    int8_t compare = (inp[i] & 0xFF); //masking is used just because in the book it was mentioned,in case different mask occurs,but I think in this case it is not needed
    
    int8_t minVal = (minimum[i] & 0xFF);
    
    int8_t maxVal = (maximum[i] & 0xFF);
    if (!(compare>=minVal&&compare<=maxVal))
         is_match = false;
    }
    return is_match;
 }

上述算法适用于正值,但不适用于负值或混合值场景(比如 min 为负,max 为正)。请告诉我关于 C++ 的任何好书。

解决方法

正如所写的,如果没有确切的问题陈述,这个问题有点难以理解。在这篇文章中,它读起来好像问题是“编写一个函数来比较两个整数值”。你把它超越了极端,并假设他们的意思是二进制级别......

像这样直接使用逻辑比较运算符有什么问题:

bool isValueInBetween(int8_t val,int8_t min,int8_t max) {
    return min <= val && val <= max;
}