您的位置:首页 > 编程语言 > C语言/C++

C语言中显示变量所占字节数;字节、字、字长;原码、反码、补码

2011-03-09 15:50 411 查看
字节(Byte 发音:/‘bait/)
在ASCII码中,一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间。
字节(Byte)是计算机信息技术用于计量存储容量和传输容量的一种计量单位,1个字节等于8位二进制。

转换关系
8bit=1byte
1024byte=1kb
1024kb=1mb
1024mb=1gb
1024gb=1tb

字、字节、字长
http://baike.baidu.com/view/60408.htm

有些操作系统和处理器不把它们的标准字长称作字,相反,出于历史原因和某种主观的命名习惯,它们用字来代表一些固定长度的数据类型。比如说,一些系统根据长度把数据划分为字节(byte,8位),字(word,16位),双字(double words 32位)和四字(quad words 64位),而实际上该机是32位的。在本书中—在Linux中一般也是这样—象我们前面所讨论的那样,一个字就是代表处理器的字长

Type Size
char, unsigned char, signed char 1 byte
short, unsigned short 2 bytes
int, unsigned int 4 bytes
long, unsigned long 4 bytes
float 4 bytes
double 8 bytes
long double 8 bytes


符号属性 长度属性 基本型 所占位数 取值范围 输入符举例 输出符举例
-- -- char 8 -2^7 ~ 2^7-1 %c %c、%d、%u
signed -- char 8 -2^7 ~ 2^7-1 %c %c、%d、%u
unsigned -- char 8 0 ~ 2^8-1 %c %c、%d、%u
[signed] short [int] 16 -2^15 ~ 2^15-1 %hd
unsigned short [int] 16 0 ~ 2^16-1 %hu、%ho、%hx
[signed] -- int 32 -2^31 ~ 2^31-1 %d
unsigned -- [int] 32 0 ~ 2^32-1 %u、%o、%x
[signed] long [int] 32 -2^31 ~ 2^31-1 %ld
unsigned long [int] 32 0 ~ 2^32-1 %lu、%lo、%lx
[signed] long long [int] 64 -2^63 ~ 2^63-1 %I64d
unsigned long long [int] 64 0 ~ 2^64-1 %I64u、%I64o、%I64x
-- -- float 32 +/- 3.40282e+038 %f、%e、%g
-- -- double 64 +/- 1.79769e+308 %lf、%le、%lg %f、%e、%g
-- long double 96 +/- 1.79769e+308 %Lf、%Le、%Lg

int的长度,是16位还是32位,与编译器字长有关。
16位编译器(如TC使用的编译器)下,int为16位;32位编译器(如VC使用的编译器cl.exe)下,int为32位。

那八个位能表示多少?
最小:00000000 最大:11111111 这就是8位 也叫一个字节
如果用数没有正负之分那可以表示 0~255 共256个数字. 也可以叫做 2的8次方,你用计算器算算,2的8次方是不是等于256?
如果数有正负之分那可以表示-128~+127 也是256个数,因为8位里面拿走一个位用来表示正负了,所以只能表示最大127

/* 输出不同类型所占的字节数*/
#include <stdio.h>
void main()
{
/* sizeof()是保留字,它的作用是求某类型或某变量类型的字节数, */
/* 括号中可以是类型保留字或变量。*/
/*int型在不同的机器,不同的编译器中的字节数不一样,*/
/*一般来说在TC2.0编译器中字节数为2,在VC编译器中字节数为4 */
printf("The bytes of the variables are:/n");
printf("int:%d bytes/n",sizeof(int));
/* char型的字节数为1 */
printf("char:%d byte/n",sizeof(char));
/* short型的字节数为2 */
printf("short:%d bytes/n",sizeof(short));
/* long型的字节数为4 */
printf("long:%d bytes/n",sizeof(long));
/* float型的字节数为4 */
printf("float:%d bytes/n",sizeof(float));
/* double型的字节数为8 */
printf("double:%d bytes/n",sizeof(double));
/* long double型的字节数为8或10或12 */
printf("long double:%d bytes/n",sizeof(long double));
getchar();

}

在计算机系统中,数值一律用补码来表示(存储)。 注意模的概念。
对于计算机,其概念和方法完全一样。n位计算机,设n=8, 所能表示的最大数是11111111,若再加1称为100000000(9位),但因只有8位,最高位1自然丢失。又回了00000000,所以8位二进制系统的模为2(8)。 在这样的系统中减法问题也可以化成加法问题,只需把减数用相应的补数表示就可以了。把补数用到计算机对数的处理上,就是补码。

原码、反码、补码

http://wxdlut.blog.163.com/blog/static/128770158200911292311953/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: