1)
How do you determine the size and range of the following data types ?
- char
- unsigned char
- short int
- unsigned int
- unsigned long float
Ans:-
limits.h
header file defines the minimum and maximum range macros for
each of the data types , sizeof(datatype) returns the number
of bytes used by the datatype in current machine.
2)
Write logical expressions that tests whether a given character
variable c is
- lowercase letter
- uppercase letter
- digit
- white space(includes space,tab,newline)
Ans:-
- lowercase letter = (c >= 'a' && c <= 'z')
- uppercase letter = (c >= 'A' && c <= 'Z')
- digit = (c >= '0' && c <= '9')
- white space(includes space,tab,newline) = (c == ' ' || c == '\t' || c == '\n')
3)
Consider unsigned int val=0xCAFE; Write expressions using bit wise
operators that do the following:
- test if at least three of last four bits(LSB) are on
- reverse the byte order(i.e.,produce val=0xFECA)
- rotate four bits(i.e.,produce val=0xECAF)
Ans:-
- test if at least three of last four bits(LSB) are on –obtain the last last four digits value and check with the possible values 0x07,0x0B,0x0D,0x0E,0x0F.
Unsigned int bits = (val & 0x0F) or (val & ~((~0)<< 4)) – LSB 4 bits (bits == 0x07 || bits == 0x0B || bits >= 0x0D)
- reverse the byte order(i.e.,produce val=0xFECA) -
unsigned int val = 0xCAFE;
unsigned int res =0;
res = ((val & 0xff ) << 8) | (val >> 8); - rotate four bits(i.e.,produce val=0xECAF) -unsigned int val = 0xCAFE;unsigned int res =0;res = ( val >> 4) | ((val & 0xf) << 12);
4)
Using
precedence rules,evaluate the following expressions and determine the
value of the variables
(without running the code).Also rewrite them using parenthesis to
make the order
explicit.
- Assume(x=0xFF33,MASK=0xFF00).Expression:c=x&MASK==0;
- Assume(x=10,y=2,z=2;).Expression:z=y=x+++++y∗2;
- Assume(x=10,y=4,z=1;).Expression:y>>=x&0x2&&z
Ans:-
- The operator precedence is ==,&,=.
- Thus,the expression is equivalent to c=(x&(MASK==0)).
- i,e x=0xFF33,c=0.
- The operator precedence is ++,*,+.
- Thus,the expression is equivalent to z=(x++)+((++y)∗2).
- i,e x=11,y=3,z=10+3∗2=16.
- The operator precedence is &,&&,>>=.
- Thus,the expression is equivalent to y>>=(x&0x2)&&z.
- i,e x=10,y=2,z=1.
5)
Determine if the following statements have any errors. If
so,highlight them and explain why.
- int 2ndvalue=10;
- Assume(x=0,y=0,alliszero=1).alliszero=(x=1)&&(y=0);
- Assume(x=10,y=3,z=0;).y=++x+y;z=z−−>x;
- Assume that we want to test if last four bits of x are on.
- (int MASK=0xF;ison=x&MASK==MASK)
Ans:-
- variable value should not start with digit.
- = operator should be replaced with ==.i,e alliszero=(x==1)&&(y==0).
- this is confusing statement but its correct. y=(++x)+y;z=(z−−)>x;
- we need to add () to expression if we need the desired result
- (int MASK=0xF;ison=x&(MASK==MASK))
Comments