16位系统:long是4字节,int是2字节
32位系统:long是4字节,int是4字节
64位系统:long是4字节,int是4字节
指针长度默认是unsigned long。
int的长度,是由硬件和系统共同决定的。比如当年的dos是运行在16位CPU下的,他的int就是两个字节,win95是运行在32位CPU下的,但是win95还是16位的系统设计,所以他的int还是2个字节,到2000,NT,XP,cpu是32位的,windows也支持32位,所以他的int就是32位的了。语言并没有规定类型的长度,但是有一些规则,比如:char不论在什么时候都是一个字节(即8个bit),int永远比char长,long不会小于int的长度。所以说,long和int其实是有差别的。
关于long foo和extern short foo,赋值之后出现的情况:
假定一个程序在一个源文件中包含了声明: long fop;而在另一个源文件中包含了 extern short foo;
如果给long类型的foo赋了一个较小的值37,short类型的foo同时获得一个值37.那么我们知道运行改程序的硬件是一个低位优先的机器。
如果给long类型的foo赋了一个较小的值37,short类型的foo同时获得一个值0.那么我们知道运行改程序的硬件是一个高位优先的机器。
float类型和double类型:
float的指数位有8位,而double的指数位有11位,分布如下:
float:
1bit(符号位)
8bits(指数位) 整数位最大可以表示255
23bits(尾数位)
double:
1bit(符号位)
11bits(指数位)
52 bits (尾数位)
分别写出bool,int,float,指针类型的变量a与“零”的比较语句
-
BOOL : if ( !a ) or if(a)
-
int : if ( a == 0)
-
float : const EXPRESSION EXP = 0.000001
-
if ( a < EXP&& a >-EXP)
-
pointer : if ( a != NULL) or if(a == NULL)