美文网首页IT狗工作室C语言C语言&嵌入式
C/C++ 检查内存中数字类型的最高有效位(MSB)

C/C++ 检查内存中数字类型的最高有效位(MSB)

作者: 铁甲万能狗 | 来源:发表于2019-09-29 23:13 被阅读0次

我们判度一个数字类型(char,short,int,float,double等数据类型的统称)的MSB位的意义所在区分数字的正/负,通过下面的图,这是我以前写过的《C/C++ 内存中的数据表示》用过的一个图例,通过它能够说明很多意义所在。

  • 若MSB为0,并且你在声明该数字的变量类型以signed前缀定义,C/C++编译器解析表示该数字为
  • 若MSB为1,并且你在声明该数字的变量类型以signed前缀定义,C/C++编译器解析表示该数字为
    image

我们使用位与运算符 “&”检查任何位的状态。 如果操作数的对应位为1,则位与运算会将结果值的每一位返回1。

  1. 我们将被检测的数字m,它的类型为T,使用sizeof()运算符可找到该数字的类型T的大小(以字节为单位)。 然后将其乘以8,即可得到数字T所需的位数。 将总位存储在某个变量中,例如
      bits = sizeof(T)* 8
    
  2. 要获取数字的MSB位,需要将1的第一位移到最高位。 左移bits-1那么多次,并将结果存储在某个变量中,例如
      msb = 1 <<(bits-1)
    
  3. 如果数字m&msb按位与运算,如果求值为1,则设置数字m是负数,否则是负数。
     m & msb ? "m是负数":"m是非负数";
    

示例代码

template <typename T>
#define BITS sizeof(T) * 8
bool is_negative_numeric(T m)
{
    T msb;
    msb = 1 << (BITS - 1);

    return m & msb ? true : false;
}

int main(int argc, char const *argv[])
{
    std::vector<int> vc{11, -245, -738, 112, 0, -45, 33, 77, -44};

    for (size_t i = 0; i < vc.size(); i++)
    {
        is_negative_numeric<int>(vc[i]) ? std::cout << "负数"
                                                    << ","
                                        : std::cout << "非负数"
                                                    << ",";
    }
    return 0;
}

测试结果

相关文章

  • C/C++ 检查内存中数字类型的最高有效位(MSB)

    我们判度一个数字类型(char,short,int,float,double等数据类型的统称)的MSB位的意义所在...

  • C++中New关键字和命名空间

    动态内存分配 C++中的动态内存分配C++中通过new关键字进行动态内存申请C++中的动态内存申请是基于类型进行的...

  • C++中的新成员

    C++中的动态内存分配 C++中通过new关键字进行动态内存申请 C++中的动态内存申请是基于类型进行的 dele...

  • 十、动态内存分配与命名空间

    1、C++中的动态内存分配 通过new关键字进行动态内存申请 C++中的动态内存申请时基于类型进行的 delete...

  • 这些ARM基础知识你还不知道吗

    1 ARM中一些常见英文缩写解释 MSB:最高有效位; LSB:最低有效位; AHB:先进的高性能总线; VPB:...

  • 浮点数(实数)

    接下来时小端和大端的存储 0x12345678最低有效位LSB:78;最高有效位MSB:12;小端方式:最低有效位...

  • ARM学习中的必知基本常识

    1.ARM中一些常见英文缩写解释 MSB:最高有效位; LSB:最低有效位; AHB:先进的高性能总线; VPB:...

  • 语言类型实例

    无类型: 汇编弱类型、静态类型 : C/C++弱类型、动态类型检查: Perl/PHP强类型、静态类型检查 :Ja...

  • golang 和 C++ 的内存对齐

    golang 和 C++的内存对齐,基本一致,记住规则和对应类型的 size 即可 内存对齐规则 有效对齐值是固定...

  • 开篇2:C/C++ 内存布局与程序栈

    如果你对C/C++基本数据类型的内存模型没概念的话,可以先查看该传送门《开篇1:C/C++ 内存中的数据表示》,反...

网友评论

    本文标题:C/C++ 检查内存中数字类型的最高有效位(MSB)

    本文链接:https://www.haomeiwen.com/subject/nqbqpctx.html