1.计算机里面所有数据是按照补码表示的,就是说比如16位的-1,计算机里面用补码表示成11111111,11111111
(补码的计算是:正数不变,是多少就保存实际的值;负数的话,先变成正数,然后所有位取反(反码),最后加1的补码.如-1:(-)00000000,00000001 -> 00000000,00000001->11111111,11111110(反码) ->11111111,11111111(补码).
2.计算机里面保存的值都是补码,取出来的时候,根据数据类型做不同的分析。比如,下面的程序,unsigned a:3,和int a:3是不一样的,内存里面值是:111的话,前者读出来认为是7,后者读出来就认为是-1.
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <ctype.h>
#include <string.h>
#include <memory.h>
#if 1
typedef struct node
{
unsigned a:3;
signed b:3;
int c:3;
}Node;
#else
typedef struct node
{
int a:3;
int b:3;
int c:3;
}Node;
#endif
int main()
{
int a = -1;
Node x;
printf(“sizeof(unsigned) == %d\n”,sizeof(unsigned));
printf(“sizeof(signed) == %d\n”,sizeof(signed));
printf(“sizeof(Node) == %d\n”,sizeof(Node));
memset(&x,0,sizeof(Node));
a=x.a=-1;
a=x.b=-1;
a=x.c=-1;
}
-
近期文章
近期评论
- coolker 发表在《打造最快的Hash表》
- struggle 发表在《提供C语言教学课件(适用于初学者)》
- zhanghaibo 发表在《提供C语言教学课件(适用于初学者)》
- zhanghaibo 发表在《提供C语言教学课件(适用于初学者)》
- diys 发表在《C语言编程宝典(王大刚) 1.1 C 语言的产生与发展》
文章归档
- 2022 年十月
- 2014 年一月
- 2013 年十二月
- 2012 年十一月
- 2012 年七月
- 2012 年六月
- 2012 年五月
- 2012 年四月
- 2012 年三月
- 2012 年二月
- 2011 年十二月
- 2011 年十月
- 2011 年九月
- 2011 年八月
- 2011 年七月
- 2011 年六月
- 2011 年五月
- 2011 年四月
- 2011 年三月
- 2011 年二月
- 2011 年一月
- 2010 年十二月
- 2010 年十一月
- 2010 年十月
- 2010 年九月
- 2010 年八月
- 2010 年七月
- 2010 年六月
- 2010 年五月
- 2010 年四月
- 2010 年三月
- 2010 年二月
- 2010 年一月
- 2009 年十二月
- 2009 年十一月
- 2009 年十月
- 2009 年九月
- 2009 年八月
- 2009 年七月
- 2009 年六月
- 2009 年五月
- 2009 年四月
- 2009 年三月
- 2009 年二月
- 2009 年一月
- 2008 年十二月
- 2008 年十一月
- 2008 年十月
- 2008 年九月
- 2008 年八月
- 2008 年七月
- 2008 年六月
- 2008 年五月
- 2008 年四月
- 2008 年三月
- 2008 年二月
- 2008 年一月
- 2007 年十二月
- 2007 年十一月
- 2007 年十月
- 2007 年九月
- 2007 年八月
- 2007 年七月
- 2007 年六月
- 2007 年三月
- 2007 年二月
- 2007 年一月
- 2006 年十二月
- 2006 年十一月
- 2006 年十月
- 2006 年九月
- 2006 年八月
- 2006 年七月
- 2006 年六月
- 2006 年五月
- 2006 年四月
- 2006 年三月
- 2006 年二月
- 2006 年一月
- 2005 年十二月
- 2005 年十一月
分类目录
功能