Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

* bitAnd - x&y using only ~ and | * Example: bitAnd(6, 5) = 4 * Legal ops: ~ | *

ID: 3871413 • Letter: #

Question

* bitAnd - x&y using only ~ and |

* Example: bitAnd(6, 5) = 4

* Legal ops: ~ |

* Max ops: 8

* Rating: 1

*/

int bitAnd(int x, int y) {

return 2; /* # replace this */

}

/*

* getByte - Extract byte n from word x

* Bytes numbered from 0 (LSB) to 3 (MSB)

* Examples: getByte(0x12345678,1) = 0x56

* Legal ops: ! ~ & ^ | + << >>

* Max ops: 6

* Rating: 2

*/

int getByte(int x, int n) {

return 2; /* # replace this */

}

/*

* logicalShift - shift x to the right by n, using a logical shift

* Can assume that 0 <= n <= 31

* Examples: logicalShift(0x87654321,4) = 0x08765432

* Legal ops: ~ & ^ | + << >>

* Max ops: 20

* Rating: 3

*/

int logicalShift(int x, int n) {

return 2;/* # replace this */

}

/*

* fitsBits - return 1 if x can be represented as an

* n-bit, two's complement integer.

* 1 <= n <= 32

* Examples: fitsBits(5,3) = 0, fitsBits(-4,3) = 1

* Legal ops: ! ~ & ^ | + << >>

* Max ops: 15

* Rating: 2

*/

int fitsBits(int x, int n) {

return 2;/* # replace this */

}

/*

* negate - return -x

* Example: negate(1) = -1.

* Legal ops: ! ~ & ^ | + << >>

* Max ops: 5

* Rating: 2

*/

int negate(int x) {

return 2;/* # replace this */

}

/*

* isPositive - return 1 if x > 0, return 0 otherwise

* Example: isPositive(-1) = 0.

* Legal ops: ! ~ & ^ | + << >>

* Max ops: 8

* Rating: 3

*/

int isPositive(int x) {

return 2; /* # replace this */

}

Explanation / Answer

#include <stdio.h>

using namespace std;

#include<bits/stdc++.h>

/*

* bitAnd - x&y using only ~ and |

* Example: bitAnd(6, 5) = 4

* Legal ops: ~ |

* Max ops: 8

* Rating: 1

*/

int bitAnd(int x, int y) {

return x&y;

}

/*

* getByte - Extract byte n from word x

* Bytes numbered from 0 (LSB) to 3 (MSB)

* Examples: getByte(0x12345678,1) = 0x56

* Legal ops: ! ~ & ^ | + << >>

* Max ops: 6

* Rating: 2

*/

int getByte(int x, int n) {

// n << 3 adjusts n so its value is represented in bit form.

// x is arithmetically shifted right to n*(2^3) bits.

// The mask 0xFF is applied to return only the least significant byte, byte n

return 0xff & (x >> (n << 3));

}

/*

* logicalShift - shift x to the right by n, using a logical shift

* Can assume that 0 <= n <= 31

* Examples: logicalShift(0x87654321,4) = 0x08765432

* Legal ops: ~ & ^ | + << >>

* Max ops: 20

* Rating: 3

*/

int logicalShift(int x, int n) {

//right shift by n

return x>>n;/* # replace this */

}

/*

* fitsBits - return 1 if x can be represented as an

* n-bit, two's complement integer.

* 1 <= n <= 32

* Examples: fitsBits(5,3) = 0, fitsBits(-4,3) = 1

* Legal ops: ! ~ & ^ | + << >>

* Max ops: 15

* Rating: 2

*/

int fitsBits(int x, int n) {

/* mask the sign bit against ~x and vice

versa to get highest bit in x.

Shift by n-1, and not. */

int mask = x >> 31;

int highest_bit = (~x & mask) + (x & ~mask);

  

return !( highest_bit >> (n + ~0));

}

/*

* negate - return -x

* Example: negate(1) = -1.

* Legal ops: ! ~ & ^ | + << >>

* Max ops: 5

* Rating: 2

*/

int negate1(int x) {

// get 1s complement by negation

// gets 2's compliment by adding 1

return ~x+1;

}

/*

* isPositive - return 1 if x > 0, return 0 otherwise

* Example: isPositive(-1) = 0.

* Legal ops: ! ~ & ^ | + << >>

* Max ops: 8

* Rating: 3

*/

int isPositive(int x) {

return (x>0) ? 1: 0 ; /* # replace this */

}

int main()

{

/* code */

printf("%d ", negate1(5) );

printf("%d ", fitsBits(5,3) );

printf("%d ", fitsBits(-4,3) );

return 0;

}

OUTPUT