1、如该结构体:
struct foo
{
int i ;
char c[2] ;
short s ;
}
现在假设int是32位,char是8位,short是16位,sizeof(foo)将会是多少呢?直观上认为是4+2+2为8字节,可是在许多体系结构上,访问自然对齐的数据元素的速度则比较快,因此,编译器将会按照最佳对齐情况的需要填充字节。如果是4字节对齐,则sizeof(foo)将等于12.
microsoft visual c++有提供#pragma pack来指定对齐方式
如:#pragma pack(8)
1、ANSI C 标准没有规定char类型在默认情况下是有符号的还是无符号的,因此,由于隐式升级规则,将可能导致极端混乱的行为,如:
char c ;
c = 0xFF ;
if( c == 0xFF)
{
//相关代码,此处是否执行将会取决于你的编译器
}
如果编译器将char类型当做有符号类型的话,将不会执行大括号里面的代码,由于隐式升级规则,char将升级为int型,也就是说,转换后,c的值为0xFFFFFFFF,和0xFF比较的话,当然是不等的。
如果是无符号的话,那将会测试成功。又如:
char c ;
while( (c = getcha...
1、不要认为数字常量在所有平台上的表示都是相同的,例如,-1和0xFFFFFFFF是一样的,可并不总是如此,只有在32位系统上才是等价的,在64位系统上表示的是很大很大的正数。
2、位屏蔽,如想屏蔽低四位:
(1)nonportable code
unsigned long x = some_vaue ;
x &= 0xFFFFFFF0 ; // this code is absolutely wrong on 64 bits platform ;
(2)portable code
unsigned long x = some_value ;
x &...
相信很多人都看过爱情公寓了,和老友记差不多。我特别喜欢关谷君说的一句话:学到老,活到老。很多朋友看了可能心里就想:扯淡,明明就是活到老,学到老。没错,中国的古话确实是这样的,不过我想想,关谷君说的也不是没有道理啊,想活到老,就必须学到老,我喜欢这样解释,因为我喜欢不断的学习来提升我自己。
受到这句话的启发,我决定,开通了这个专用技术空间,以记录我一生所学的一切的一切,包括技术、哲学、生活感悟等等。
其实我心里一直很抑郁,因为我发现我其实是一个文盲,对文学、历史、艺术、哲学却一知半解,甚至一窍不通,我打从心底里鄙视我自己,我要努力了。
希望...