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

本文介绍了计算机中字节、字、字长的概念,以及C语言中不同数据类型所占的字节数。内容包括ASCII码中字符的字节数,字节与位的关系,以及各种数据类型的长度,如char、short、int、float和double等。同时,文章还讲解了原码、反码和补码在计算机数值表示中的应用,特别是在减法运算中的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

字节(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/

 

 

首先,我们需要了解如何将十进制转换成二进制的原码反码补码。 1. **原码**:正数直接表示,负数则最高位为1(对于有符号整数)。 - **95 (十进制)**: 原码 = 000001010101(因为95在8位内,不足8位补0) - **-131 (十进制)**: 原码 = 111110100011 (负数最高位为1) 2. **反码**:对原码取反,然后加1(对于有符号整数)。负数的反码是除符号位外全变1。 - **95 (十进制)**: 反码 = 111110101010 (+95的反码) - **-131 (十进制)**: 反码 = 000001011100 (-131的反码) 3. **补码**:也是对原码取反,然后加1,但对于负数,有一个特殊情况:零的补码等于其本身。 - **95 (十进制)**: 补码 = 111110101010 (+95的补码,无需调整) - **-131 (十进制)**: 补码 = 000001011101 (-131的补码,注意最后一位由1变为0) 4. **浮点数的原码反码补码**: - **0.125 (十进制)**: 由于是小数,通常会采用偏移二进制表示法,即在最高位后面跟上实际值的二进制。0.125 = 1 / 8 = 0.00011001... - 原码 = 000000000000011001000... (保留足够位数) - 反码 = 11111111111110011111100... (先取反再加1) - 补码 = 11111111111110011111100... (小数部分不变,不需要加1) - **-0.875 (十进制)**: 同样是小数,可以将其转化为二进制形式 -0.125 * 8 = -1 = -1000... - 原码 = 100000000000001110000... (带符号,注意最左一位) - 反码 = 01111111111111000111100... (先取反再加1) - 补码 = 01111111111111000111100... (小数部分不变,不需要加1)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值