龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > C/C++开发 >

C程式中关于整数储存的说明

时间:2009-12-22 15:42来源:未知 作者:admin 点击:
分享到:
write by polaris(lz0ace@hotmail.com) 转载请注明作者 首先感谢玲对我的支持,在我最困难时是她帮助了我。声明一下,高手就不要看了,这篇文章只是随便写写,解决一些C编程新手的问题。

  

write by polaris(lz0ace@hotmail.com)

  

  

转载请注明作者

  

  

首先感谢玲对我的支持,在我最困难时是她帮助了我。声明一下,高手就不要看了,这篇文章只是随便写写,解决一些C编程新手的问题。

  

废话少说先看程序:

  

------------------------------start------------------------------------------

  

strUCt bit

  

{

  

unsigned a_bit:2;//为bit结构体中的a_bit成员分配两字节的空间

  

unsigned b_bit:2;//为bit结构体中的b_bit成员分配两字节的空间

  

unsigned c_bit:1;//为bit结构体中的c_bit成员分配两字节的空间

  

unsigned d_bit:1;//为bit结构体中的d_bit成员分配两字节的空间

  

unsigned e_bit:2;//为bit结构体中的e_bit成员分配两字节的空间

  

unsigned Word:8;

  

}

  

main()

  

{

  

struct bit * p;

  

unsigned int modword;

  

printf("enter..

");

  

scanf("%x",&modword);

  

p=(struct bit * )&modword;

  

printf("a_bit:%d

",p->a_bit);

  

printf("b_bit:%d

",p->b_bit);

  

printf("c_bit:%d

",p->c_bit);

  

printf("d_bit:%d

",p->d_bit);

  

printf("e_bit:%d

",p->e_bit);

  

}

  

------------------------------end---------------------------------------------

  

运行程序,输入96答案是

  

a_bit:2

  

b_bit:1

  

c_bit:1

  

d_bit:0

  

e_bit:2

  

scanf接收十六进制的96后在内存中的储存为二进制10010110,注重这里是unsigned形式,没有符号位。之后P指针被赋moduword的地址。由于P指针指向的空间是bit型,所以打印p->a_bit是既为modword的第一个两字节空间的值。按常理b_bit所占区域的值应该是二进制01,但是打印b_bit时输出的竟然2。我晕!!!

  

情急之下我又试了95输出为1,1,1,,0,2再看97,输出3,1,1,0,2。渐渐明白了,原来在C编译器中以整形变量的右端作为低地址的。

  

本文碰到的问题可能新手们会再次碰到,希望可以作为参考。

  

精彩图集

赞助商链接