Use of the : operator in C
Solution 1
They're bit-fields, an example being that unsigned int addr:9;
creates an addr
field 9 bits long.
It's commonly used to pack lots of values into an integral type. In your particular case, it defining the structure of a 32-bit microcode instruction for a (possibly) hypothetical CPU (if you add up all the bit-field lengths, they sum to 32).
The union allows you to load in a single 32-bit value and then access the individual fields with code like (minor problems fixed as well, specifically the declarations of code
and test
):
#include <stdio.h>
struct microFields {
unsigned int addr:9;
unsigned int cond:2;
unsigned int wr:1;
unsigned int rd:1;
unsigned int mar:1;
unsigned int alu:3;
unsigned int b:5;
unsigned int a:5;
unsigned int c:5;
};
union micro {
unsigned int microCode;
struct microFields code;
};
int main (void) {
int myAlu;
union micro test;
test.microCode = 0x0001c000;
myAlu = test.code.alu;
printf("%d\n",myAlu);
return 0;
}
This prints out 7, which is the three bits making up the alu
bit-field.
Solution 2
It's a bit field. The number after the colon is how many bits each variable takes up.
Solution 3
That's a declarator that specifies the number of bits for the variable.
For more information see:
http://msdn.microsoft.com/en-us/library/yszfawxh(VS.80).aspx
Russel
Updated on September 04, 2020Comments
-
Russel over 3 years
Possible Duplicates:
What does ‘: number’ after a struct field mean?
What does ‘unsigned temp:3’ meansI hate to ask this type of question, but it's really bugging me, so I will ask:
What is the function of the : operator in the code below?
#include <stdio.h> struct microFields { unsigned int addr:9; unsigned int cond:2; unsigned int wr:1; unsigned int rd:1; unsigned int mar:1; unsigned int alu:3; unsigned int b:5; unsigned int a:5; unsigned int c:5; }; union micro { unsigned int microCode; microFields code; }; int main(int argc, char* argv[]) { micro test; return 0; }
If anyone cares at all, I pulled this code from the link below: http://www.cplusplus.com/forum/beginner/15843/
I would really like to know because I know I have seen this before somewhere, and I want to understand it for when I see it again.