红联Linux门户
Linux帮助

c语言

发布时间:2013-04-19 18:43:47来源:红联作者:
写一个C表达式,在x的最高有效字节中的位都为1得到1,而在其他情况得到0假设x是int类型
文章评论

共有 9 条评论

  1. 枫静水镜 于 2013-04-22 13:59:07发表:

    bucuo

  2. love1800 于 2013-04-21 23:08:08发表:

    谢了。我看看!

  3. hstking 于 2013-04-20 19:44:18发表:

    抱歉,是我欠考虑。我本意是想左移得到x的最高位。仔细想想,得到最高位得右移才行。但右移又涉及到int的范围。可我还是认为用移位后再与u int与或运算比较方便。毕竟要得到int的位长也很方便,sizeof就可以了。

  4. pl_014 于 2013-04-20 17:10:33发表:

    引用:
    先把x左移一位,然后和u int 0进行与运算。我觉得没问题。而且int和u int也不存在长度问题。
    hstking 发表于 2013-4-20 10:02

    你指的是unsigned int与int的长度一致么?为什么说左移一位->与运算就可以做到判断每一个字节是否为全1呢?

  5. hstking 于 2013-04-20 10:02:33发表:

    先把x左移一位,然后和u int 0进行与运算。我觉得没问题。而且int和u int也不存在长度问题。

  6. Thisyear 于 2013-04-20 08:31:47发表:

    纯路过的

  7. pl_014 于 2013-04-19 22:00:14发表:

    引用:
    为什么不直接用与或运算?
    hstking 发表于 2013-4-19 21:11

    在不确定的编译环境下,int型的变量长度属于未知

  8. hstking 于 2013-04-19 21:11:28发表:

    为什么不直接用与或运算?

  9. pl_014 于 2013-04-19 20:08:02发表:

    [i=s] 本帖最后由 pl_014 于 2013-4-19 20:12 编辑 [/i]

    方法一:采用联合[code]union number_int
    {
    int a;
    char b[sizeof(int)];
    };

    int numok(int numi)
    {
    union number_int c;
    c.a=numi;
    if(c.b[0]==0xFF)
    {
    return 1;
    }
    else
    {
    return 0;
    }
    }[/code]方法二:指针[code]
    int numok(int numi)
    {
    char *a=(char*)&numi;
    if(*a==0xFF)
    {
    return 1;
    }
    else
    {
    return 0;
    }
    }[/code]可以简化为[code]((*(char*)&a)==0xFF)?1:0[/code]此法涉及到指针类型的转换,我并不能肯定一定不会出问题,此法建议谨慎使用。
    如果编译器可以使用内联函数(C语言于C99标准后允许使用内联函数),建议实现成内联函数。