"); //-->
先看程序
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/
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。