新闻  |   论坛  |   博客  |   在线研讨会
在结构体中定义规定位数的类型变量
dianzixinxi | 2012-08-05 22:05:36    阅读:2779   发布文章

转发:只占8位的int类型

先看程序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include
 
typedef struct test
{
     int i:8;
}test;
 
int count = 0;
 
int hmone(int m)
{
   while(m)
{  
    count++;
    m = m&(m-1);
}
return count;
}
 
int main()
{
test t;
t.i = -1;
printf("%d\n", hmone(t.i));
printf("%d\n", t.i);
return 0;
}

这个程序在一个struct中定义了一个只占8位的int型变量。而且这种只占8位的int型貌似只能定义在结构体中。int hmone(int m)函数的作用是返回m的二进制表示中有多少个1。在main函数中,我们将8位的int赋-1,然后该程序的输出是32和-1,如果我们给t.i赋128的话,程序输出就是25,-128。

从这两次的输出中可以看出:整个t.i的32位也表示出t.i的值。而t.i读的是32位中的低8位。低八位的第八位也是符号位。
例如上边,当给t.i赋-1时,有32个1,并且只看低8位并且第8位算符号位的话,值也是-1。
当给t.i赋128时,由于8位有符号的范围是-128—127,128超了,所以输出值变为-128了,而-128的32位表示就是前边有25个1(32位为符号位)。而此时低8位是10000000,第一位是符号位,所以就是-128。
 引用地址:http://bamboo.72pines.com/2011/05/22/%E5%8F%AA%E5%8D%A08%E4%BD%8D%E7%9A%84int%E7%B1%BB%E5%9E%8B/

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
我希望和大家交朋友,也希望大家都认识我呵呵。
推荐文章
最近访客