《深入理解计算机系统》上的一道题目,关于位的。


写一个C表达式,在下列描述的条件下产生1,而在其他情况下得到0。假设x是int类型。

A.x的任何位都等于1。

B.x的任何位都等于0。

C.x的最高有效字节中的位都等于1。

D.x的最低有效字节中的位都等于0。

代码应该遵循位级整数编码规则,另外还有一个限制,你不能使用相等(==)和不相等(!=)测试。

#include <stdio.h>

int main(int argc, char *argv[])
{
    int x, num[4];
    int i;

    num[0] = 0xffffffff;
    num[1] = 0x00000000;
    num[2] = 0xff000000;
    num[3] = 0xffffff00;

    for(i = 0; i < 4; i++){    
        x = num[i];
        if (
            !~x ||        /* all bits are one */ 
            !x ||        /* all bits are zero */
            !~(x | 0x00ffffff) ||    /* most significant byte is 0xff */
            !(x & 0x000000ff)    /* least significant byte is 0x00 */
            ) {
            printf("%d is 1\n", num[i]);
        } else {
            printf("%d is 0\n", num[i]);
        }
    }

    return 0;
}

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值