• 判断整数的正负零特性


    原为某软件公司试题,大意如下:对于给定的有符号32位整数,写一个函数,当该数为正数时返回1,为负数时返回-1,为零时返回零,要求不能使用任何的条件判断分支跳转语句。在这里,稍微扩展了一下,给出了对应无符号32位整数的情形。解决思路是符号位和值分开处理,对于有符号32位整数,符号位右移31位即得a,若为非负数则a=0x00000000,否则a=0xFFFFFFFF;然后将值部分各位的值(0或1不断缩小合并到一位中去得到b,这是针对0和正数的情况处理,再将a和b位即可。C++代码描述如下:

    1//若val为0则返回0, val为负数则返回-1, 为正数返回1
    2int32_t check32(int32_t val)
    3
    {
    4    int32_t a = val
    >> 31;
    5    int32_t b = (val
    & 0x0000FFFF) | ((val >> 16)&0x0000FFFF);
    6    b = (b
    & 0x000000FF) | ((b >> 8)&0x000000FF);
    7    b = (b
    & 0x0000000F) | ((b >> 4)&0x0000000F);
    8    b = (b
    & 0x00000003) | ((b >> 2)&0x00000003);
    9    b = (b
    & 0x00000001) | ((b >> 1)&0x00000001);
    10   return a|b;
    11}

    12
    13
    //若val为0则返回0, 否则返回1
    14uint32_t check32(uint32_t val)
    15{
    16    uint32_t a = (val & 0x0000FFFF) | ((val >> 16)&0x0000FFFF);
    17    a = (a & 0x000000FF) | ((a >> 8)&0x000000FF);
    18    a = (a & 0x0000000F) | ((a >> 4)&0x0000000F);
    19    a = (a & 0x00000003) | ((a >> 2)&0x00000003);
    20    a = (a & 0x00000001) | ((a >> 1)&0x00000001);
    21    return a;
    22}

    最简单的方法是

    return (val >> 31) | -(-val >> 31);

  • 相关阅读:
    tesserocr与pytesseract模块的使用
    python pillow模块用法
    tesseract-ocr,tesseract,pytesseract在windows下怎么安装
    Python pillow库安装报错
    Python 让输入的密码不在屏幕上显示
    Linux 中CPU 和 GPU 的行为监控
    Linux之RedHat7如何更换yum源
    RHEL6搭建网络yum源仓库
    一文读懂内网、公网和NAT
    将Android手机无线连接到Ubuntu实现唱跳Rap
  • 原文地址:https://www.cnblogs.com/fengye87626/p/2965883.html
Copyright © 2020-2023  润新知