- 论坛徽章:
- 0
|
原帖由 姚世友 于 2008-12-17 21:51 发表
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char** argv)
{
union
{
struct
{
char a:1;
char b:2;
char c:3;
}d;
char e;
} f;
f.e = 1;
printf("%d\n",f.d.a);
getchar();
return 0;
}
以上结果只在x86上,因为和字节顺有关
由于f.d.a总共只占一位,也就是要么为0,要么为1,但因为它是有符号的,所以在这里就是-1了,如果改成为无符号的,则输出1,和e是否有符号没有关系。
即使改成:
int main(int argc, char** argv)
{
union
{
struct
{
char a:1;
char b:2;
char c:3;
}d;
char e;
} f;
f.d.a = 1;
printf("%d\n",f.d.a);
getchar();
return 0;
}
输出仍是-1或1(也与字节顺有关)
______________________
处理器 操作系统 字节排序
Alpha 全部 Little endian
HP-PA NT Little endian
HP-PA UNIX Big endian
Intelx86 全部 Little endian <-----x86系统是小端字节序系统
Motorola680x() 全部 Big endian
MIPS NT Little endian
MIPS UNIX Big endian
PowerPC NT Little endian
PowerPC 非NT Big endian <-----PPC系统是大端字节序系统
RS/6000 UNIX Big endian
SPARC UNIX Big endian
IXP1200 ARM核心 全部 Little endian
[ 本帖最后由 Aquester 于 2008-12-20 13:49 编辑 ] |
|