# Gsp 215 Week 1 Work

Write C expressions that evaluate to 1 when the following conditions are true, and to 0 when they are false. Assume x is of type int.

A. Any bit of x equals 1.

B. Any bit of x equals 0.

C. Any bit in the least significant byte of x equals 1.

D. Any bit in the most significant byte of x equals 0.

Your code should follow the bit-level integer coding rules (page 120), with the additional restriction that you may not use equality (==) or inequality (!=) tests. ◆SOLUTIONS◆

A. !!x

B. !!~x

C. !!(x & 0xFF)

D. !!(~ & 0xFF)

-------------------------------------------------

2.68 ◆◆

Write code for a function with the following prototype:

/*

* Mask with least signficant n bits set to 1

* Examples: n = 6 --> 0x2F, n = 17 --> 0x1FFFF

* Assume 1 <= n <= w

*/

int lower_one_mask(int n);

Your function should follow the bit-level integer coding rules (page 120). Be careful of the case n = w.

◆SOLUTIONS◆

#include <limits>

int value = 0x13;

int val_1 = 0x22;

int val_2 = 0x25;

int new_mask = mask_1_low(value, 4);

int val_f_1 = val_1 & new_mask;

int val_f_2 = val_2 & new_mask;

int mask_1_low(int value, int n)

{

unsigned int mask_val = numeric_limits<unsigned int>::max(); mask_val = ~(mask_val << n);

return (value & mask_val);

}

-------------------------------------------------

2.71 ◆

You just started working for a company that is implementing a set of procedures to operate on a data structure where 4 signed bytes are packed into a 32-bit unsigned. Bytes within the word are numbered from 0 (least significant) to 3 (most significant). You have been assigned the task of implementing a function for a machine using two’s-complement arithmetic and arithmetic right shifts with the following prototype:

/* Declaration of data type where 4 bytes are packed

into an unsigned */...

Please join StudyMode to read the full document