计算机系统导论——小班作业(1)——位运算

2019年9月14日

 

题目2.59

解法一:

(x & 0xFF) | (y & ~0xFF)

解法二:

(x | ~0xFF) & (y | 0xFF)

 

 

特殊要求

  

题目2.61

 

答案: 

A: !(~x) 或 !(x+1)
B: !x
C: !((x & 0xFF) – 0xFF) 
   或 !(~x << ((sizeof(int) – 1) << 3))
D: !(x >> ((sizeof(int) – 1) << 3)) 
   或 !(x & (0xFF << ((sizeof(int) – 1) << 3)))

 

 题目2.63

 

答案: 

/* 注意k=0的情况,不能左移w-k位*/

unsigned srl(unsigned x, int k){
    /* Perform shift arithmetically */
    unsigned xsra = (int) x >> k;
    int w = sizeof(int) << 3;
    int temp = (2 << (w - k - 1)) - 1;//最低的w-k位是1,高位是0
    return xsra & temp;//高位变0
}

int sra(unsigned x, int k){
    /* Perform shift logically */
    int xsrl = (unsigned) x >> k;
    int w = sizeof(int) << 3;
    int sign = xsrl & (1 << (w - k - 1));//仅保留右移后的符号位
    int temp = ~sign + 1;//符号位为0,则temp所有位为0;符号位为1,则temp的高k+1位为1,其余位为0
    return xsrl | temp;//高位全部变符号位
}

 助教学长还提供了一种特别简洁的sra()函数的写法

int sra(unsigned x, int k){
    /* Perform shift logically */
    int xsrl = (unsigned) x >> k;
    int w = sizeof(int) << 3;
    ( x & (1<<(w-1)) ) && ( xsrl |= (~0<<(w-k)) );//A && B, 若A为真则执行B,若A为假则跳过B
    return xsrl;
}

 

ics好难QUQ

加油!

转载于:https://www.cnblogs.com/tanshiyin-20001111/p/11556814.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值