数据存储的方式 无符号和有符号的取值范围

一、数据存储的方式

  1. 原码


  1. 原码简单易懂,与带符号数本身转换方便,只要符号还原即可,但当两个正数相减或不同符号相加时,必须比较两个数那个绝对值大,才能决定谁减谁,才能确定结果是正数还是负数,所以原码不便于加法运算。

2.反码


  1. 补码

在计算机系统中,数值一律用补码来存储,主要原因是:.

1.统一了零的编码。

2.将符号位和其它位统一处理

3.将减法运算转变为加法运算

4.两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。


例如:72-68 即为72+(-68)

72

原码:01001000

反码:01001000

补码:01001000

-68

原码:11000100

反码:10111011

补码:10111100

所以:72+(-68)=4

二进制表示为 1 0000 0100

注:当结果二进制数出现九位时,舍弃最左边位数,即结果为0000 0100

二、无符号和有符号的取值范围

  1. 无符号

unsigned 无符号的值一般为正值

例如:char 占1个字节大小 1B=8bit

所以char 存储数据大小为:0—2^8-1

int 4个字节 0—2^32-1

  1. 有符号

sign 可以为负数

例如:char -2^8—2^7-1

int -2^31—2^31-1

三、sizeof函数

1.sizeof不是函数,所以不需要包含任何头文件,它的功能是计算一个数据

类型的大小,单位为字节。

2.sizeof的返回值为size_t.

3.size_t 类型在 32位操作系统下是unsigned int,是一个无符号的整数。

例如:

#include<stdio.h>
#include<stdlib.h>
int main()
{
    unsigned int len=sizeof(char);//char, int, float, long ,double,

    printf("%d",sizeof(char));

    system("pause");
        return 0;
}
    
    

注:相应字符型有其存储数据大小,不能超出,否则运行时会出现乱码。

四、数值溢出

一个字节有八位,

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char ch = 127;
    ch = ch + 2;
    printf("%d", ch);
    system("pause");
    
}

五、注意

需要注意的是,整型数据在丙存中占的字节数与所选择的操作系统有关。虽然 C语言标准中没有明确规定整型数据的长度,但 long 类型整数的长度不能短于int 类型,short 类型整数的长度不能长于int 类型。

当一个小的数据类型赋值给一个大的数据类型,不会出错,因为编译器会自动转化,但当一个大的类型赋值给一个小的数据类型,那么就可能丢失高位。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值