嘿,这一切都是为了C编程。
以下是提交给我的问题,有人可以告诉我如何在C中正确编写以下语句的代码吗?仅供参考,我已经回答了这个测验,但我的教授不会自己发布答案。当他评分时我做得很差,但帮助理解这一点我将提供我的答案(尽管不正确)
1:创建一个包含以下代码的结构:
将结构命名为motorStatus
使用typedef命名此新数据类型:mtrStatus_t
typedef unsigned char mtrStatus_t;
struct motorStatus mtrStatus_t {
mtrStatus_t count: 4;
mtrStatus_t redLED: 1;
mtrStatus_t greenLED: 1;
mtrStatus_t motorDirection: 2;
};
2:创建结构的新实例并将其命名为motor1Status
motorStatus = motor1Status;
3:编写语句以初始化新结构成员,如下所示:
电机方向:10
计数:0x09; redLED:0x01; greenLED:0x00 motorDirection:0x0A
答案 0 :(得分:2)
对于第一个,我会做这样的事情:
typedef struct motorStatus
{
int count: 4;
int redLED: 1;
int greenLED: 1;
int motorDirection: 2;
} mtrStatus_t;
第二个更像是:
mtrStatus_t motor1status;
最后:
motor1status.count = 0x9;
motor1status.redLED = 1;
motor1status.greenLED = 0;
motor1status.motorDirection = 0x02;
Count是十六进制数,因为它是BCD(二进制编码的十进制)http://en.wikipedia.org/wiki/Binary-coded_decimal 在BCD中,使用4位来表示数字0-9,有一些未使用的位模式,因此使用它的简单方法是使用十六进制(也使用4位来表示数字0x0-0xf),但在BCD中你只是不使用数字0xa-0xf。
motorDirection为0x02的原因是因为他想要电机方向为10,但它是一个2位字段,所以我假设他的意思是10二进制,即0x02十六进制。
答案 1 :(得分:0)
考虑按照指定的顺序满足这些要求。请注意,某些要求合并为一个。作业通常就是这种情况;讲师并不总是完美的语言学家或逻辑学家,特别是IT讲师。
1: Create a structure that will hold bits the represent the following: count: a 4 bit BCD number red LED: 1 bit green LED: 1 bit motor direction: 2 bits Name the structure motorStatus
首先回应这个,不使用typedef。对于位域使用类型int
。下一个要求:
Use typedef to name this new data type: mtrStatus_t
您已经证明了编写基本typedef的能力。 typedef unsigned char mtrStatus_t;
表示“我将mtrStatus_t定义为别名unsigned char”。现在,写一个像这样的基本typedef,意思是“我将mtrStatus_t定义为alias struct motorStatus”。将它放在struct motorStatus
定义之后,以便编译器可以看到它的别名。
2: Create a new instance of the structure and name it motor1Status
为了澄清,您的讲师要求您声明名为motor1Status
的变量,其类型为mtrStatus_t
或struct motorStatus
。我认为你可以声明变量,但如果我错了就纠正我。
3: Write statements to initialize the new structure members as follows: count: 9 BCD red LED: 1 green LED: 0 Motor Direction: 10 count: 0x09; redLED: 0x01; greenLED: 0x00 motorDirection: 0x0A
您的讲师要求初始化,未分配。在char str[] = "fubar";
和char str[] = {'h','e','l','l','o','\0'};
中,声明并初始化str以存储对应于“fubar”的字符串。在char str[6]; strcpy(str, "fubar");
中声明str没有初始化,并且“fubar”中的每个字节被复制(分配)到str中的相应位置。你如何初始化结构?与第二个 str 初始化非常相似。
struct length_prefixed_string {
size_t length;
int zero;
char string[];
};
/* Initialisation here: */
struct length_prefixed_string hello = { .length = 5,
.string = "hello" };
此示例使用灵活的数组成员,该成员只能在结构的末尾声明:char string[];
。它传达一个位于结构末尾的未知长度数组,不计入sizeof (struct length_prefix_string)
。因此,该示例将未知长度存储在 length 参数中。这有点偏离主题,但你可以看到上面的初始化(而不是作业)。这个例子将初始化与赋值区分开来;您无法使用.string
分配此结构的hello.string = "hello";
成员。
另一个区别是:初始化时未提及的任何成员将被分配零值(但在初始化时仅),因此{{上面示例中的1}}将为0.因此,您可以声明一个数组并使用一个语句对其进行零填充:hello.zero
(赋值和初始化之间的另一个区别:int array[size] = { 0 };
无效) 。话虽如此,为了你的任务而忽略这个事实并明确地初始化greenLED是一个好主意,这样你的标记审查员就不会误解。
我希望我有所帮助,这里......