zoukankan      html  css  js  c++  java
  • C语言数值表示和计算

    ---恢复内容开始---

    一、数据类型

    在我的Windows上查看<limit.h>可以看到对数据类型长度的定义

    #define SHRT_MIN (-32768) // minimum (signed) short value
    #define SHRT_MAX 32767 // maximum (signed) short value
    #define USHRT_MAX 0xffff // maximum unsigned short value
    #define INT_MIN (-2147483647 - 1) // minimum (signed) int value
    #define INT_MAX 2147483647 // maximum (signed) int value
    #define UINT_MAX 0xffffffff // maximum unsigned int value
    #define LONG_MIN (-2147483647L - 1) // minimum (signed) long value
    #define LONG_MAX 2147483647L // maximum (signed) long value

    此外推荐<stdint.h>根据比特位数选择数据类型如uint16_t,无符号16位整数

    typedef signed char int8_t;
    typedef short int16_t;
    typedef int int32_t;
    typedef long long int64_t;
    typedef unsigned char uint8_t;
    typedef unsigned short uint16_t;
    typedef unsigned int uint32_t;
    typedef unsigned long long uint64_t;

     大尾端:高字节放在存储地址低位(地址0最低),低字节放高端(不同尾端,每个字节内部顺序都是一样,不同字节在内存、磁盘中排列顺序不同)

    网络字节序转本机字节序:ntohl,ntohs

    本机字节序转网络字节序:htonl,htons

    浮点数都有符号位,float整体精确表示位数有限,23位尾数表示7位十进制数字,使用更精确的中间值如long double,最后存入double(精确16位),使用浮点数关注末尾误差的累积。

    二、数据类型隐式转换规则

    隐式转换是在赋值右边计算过程临时改变对其二进制码解释规则,不改变二进制码也不会根本性改变解释规则,C语言缺省规则为数值表示范围小的数据转换为大的。最后赋值结果数据长度和解释方式决定于=左边数据类型。

    1、有符号数无符号数同时出现在一个表达式,无符号转换为有符号,即把负数的补码解释为无符号数,往往是很大的正数,这在逻辑表达式以及减法运算中易错误,除非与数值计算无关的,其他少用无符号数

    2、都是有符号数直接扩,无符号同理

    整形数的截断与扩展

    1、赋值时左小于右的数据长度,左边只能截取右边的低位,解释方式不变,故负数可能变成正数

    2、正数相乘相加后溢出截断保留低位,长度为左边类型的

    2、扩展后数值不变

    三、类型转换

    基本转换:char,short运算前被转换int,float变double,做完基本转换若运算符两端数据类型仍不一致,编译器做自动类型转换

    C语言没有规定char一定是有符号的,故使用时一定写名signed或unsigned,ASCII字符最高位0

    自动类型转换:窄变宽(同类无符号变有符号);浮点数间大转小丢失小数;浮点转整数具体分析,反之ok

    强制类型转换也是临时的

    ---恢复内容结束---

  • 相关阅读:
    函数重载和函数指针在一起
    Uva
    Uva
    Uva
    Uva
    Uva
    CCPC-Wannafly-day5
    CCPC-Wannafly-day3
    CCPC-Wannafly-day2
    CCPC-Wannafly-Winter 2020.01.12总结
  • 原文地址:https://www.cnblogs.com/yifan2015/p/5714749.html
Copyright © 2011-2022 走看看