zoukankan      html  css  js  c++  java
  • C中的数据存储形式

    首先介绍一下原码、反码和补码的概念:

    原码:符号位用0表示正号,用1表示负号,数值一般用二进制形式表示。

    反码:正数的反码与原码相同,负数的反码是对原码(除符号位)按位取反。

    补码:正数的补码与原码相同,负数的补码是对它的原码(除符号位外)各位取反,并在末位加1而得到的(或者说是原码的绝对值按位取反后在末位加1)。

    注意:0用原码有两种表示方法:00…0(+0)或100…0(-0),用反码有两种表示方法:00…0或111…1,用补码只有一种表示方法:000…0。

    下面介绍一个各种数据类型的存储形式:

    1.  整形数据

    采用补码形式存放在内存中。对于int型数据,如果不指定unsigned或指定signed,则存储单元中最高位代表符号(0位正,1位负);如果指定unsigned,为无符号型,存储单元全部二进位用作存放数据本身,而不包括符号。

    下面是常见的数的存储形式:

    有符号整形变量a = 32767:

    0

    1

    1

    1

    1

    1

    1

    1

    1

    1

    1

    1

    1

    1

    1

    1

    符号位

    有符号整形变量a = -32768:

    1

    0

    0

    0

    0

    0

    0

    0

    0

    0

    0

    0

    0

    0

    0

    0

    符号位

    (注意:int型范围(特指在Turbo C中)是-32768~32767,因此32767+1之后并不是32768,却变成了-32768,可以看出10…0的确是-32768的补码)

    无符号整型变量b = 65535:

    1

    1

    1

    1

    1

    1

    1

    1

    1

    1

    1

    1

    1

    1

    1

    1

    代表数据的第1位

    (注意:无符号型相对于符号型变量来说,其正数范围扩大一倍)

    2.  实型数据

    实型变量有2中表示方法,小数形式和指数形式(123e3或123E3,注意e/E之前必须有数字,后面指数必须为整数)。在内存中,实数形式是按照指数形式存储的,系统把一个实数数据分成小数部分和指数部分分别存放。

    3.  字符常量

    字符常量是把它对应的ASCII码(整形变量)值放在内存中(最终是二进制)。

  • 相关阅读:
    Mysql数据优化--DBA梳理珍藏篇
    Spring缓存注解@Cacheable
    Spring常用知识点
    谈一谈对MySQL InnoDB的认识及数据库事物处理的隔离级别
    MySQL主从复制的实现过程
    List 与 数组 互转
    位运算实现小正整数乘法
    最大的K个数
    Java 编码与字符(2)
    JSP工作原理
  • 原文地址:https://www.cnblogs.com/purplec/p/5561356.html
Copyright © 2011-2022 走看看