zoukankan      html  css  js  c++  java
  • C语言中的有符号数与无符号数


    1.  C语言支持所有整型数据类型的有符号和无符号运算,尽管C语言标准并没有指定用哪种方式来表示有符号整数,但是几乎所有的     机器都使用补码。


    2.  C语言中默认的整形数据是有符号的,并且允许无符号数和有符号数之间进行转换。转换的原则是底层的位保持不变。

     

    3.  执行运算时,如果一个运算数是有符号的而另一个是无符号的,那么C语言会隐式的将有符号参数强制类型转换为无符号数,并假     设这两个数都是非负的。


    4.  无符号数的编码

        假设一个整数数据类型有w位。我们可以用x来表示整个向量。我们用一个函数

        

        考虑32位所能表示的值得范围。

        最小值为用位向量[00000000000000000000000000000000]表示,也就是整数值0;

        最大值为用位向量[11111111111111111111111111111111]表示,也就是整数值 (2^32)-1=4294967295。


    5.  有符号数编码

        最常见的有符号数的计算机表示方式就是补码形式。

        在补码的定义中,将字的最高有效位解释为负权。用函数

        

        

        同样考虑32位补码所能表示的值得范围。

        能表示的最小值的位向量[10000000000000000000000000000000],其整数值为 -2^31= -2147483648

        能表示的最大值的位向量[01111111111111111111111111111111],其整数值为 (2^31)-1= 2147483647


    6.  有符号数的其他表示方法

        反码:

        

        原码,最高有效位是符号位,用来确定剩下的位应该取负权还是正权。

        

        

        术语补码源于这样一种情况,对于非负数x,我们用(2^w)-x(这里只有一个2)来计算 -x 的w位表示。

        术语反码来源于这样一个属性,我们用[1111…1]-x来计算 -x 的反码表示。

                                

                                                                                                  重要的数字

    字长

    8

    16

    32

    64

    UMax

    255

    0x FF

    65535

    0x FFFF

    4294967295

    0x FFFFFFFF

    18446744073709551615

    0x FFFFFFFFFFFFFFFF

    TMin

    -128

    0x 80

    -32768

    0x 8000

    -2147483648

    0x 80000000

    -9223372036854775808

    0x 8000000000000000

    TMax

    127

    0x 7F

    32767

    0x 7FFF

    2147483647

    0x 7FFFFFFF

    9223372036854775807

    0x 7FFFFFFFFFFFFFFF

    -1

    0x FF

    0x FFFF

    0x FFFFFFFF

    0x FFFFFFFFFFFFFFFF

    0

    0x 00

    0x 0000

    0x 00000000

    0x 0000000000000000

     

                                                                                    C语言中数字数据类型的字节数

    C声明

    32位机器

    64位机器

    char

    1

    1

    short int

    2

    2

    int

    4

    4

    long int

    4

    8

    long long int

    8

    8

    char *

    4

    8

    float

    4

    4

    double

    8

    8

     


                                 32位机器上C语言的整形数据类型的典型取值范围(方括号中的文字是可选的)

    C数据类型

    最小值

    最大值

    char

    -128

    127

    unsigned char

    0

    255

    short [int]

    -32768

    32767

    unsigned short [int]

    0

    65535

    int

    -2147483648

    2147483647

    unsigned [int]

    0

    4294967295

    long [int]

    -2147483648

    2147483647

    unsigned long [int]

    0

    4294967295

    long long [int]

    -9223372036854775808

    9223372036854775807

    unsigned long long [int]

    0

    18446744073709551615

     

     

                                           64位机器上C语言的整形数据类型的典型取值范围(方括号中的文字是可选的)

    C数据类型

    最小值

    最大值

    char

    -128

    127

    unsigned char

    0

    255

    short [int]

    -32768

    32767

    unsigned short [int]

    0

    65535

    int

    -2147483648

    2147483647

    unsigned [int]

    0

    4294967295

    long [int]

    -9223372036854775808

    9223372036854775807

    unsigned long [int]

    0

    18446744073709551615

    long long [int]

    -9223372036854775808

    9223372036854775807

    unsigned long long [int]

    0

    18446744073709551615



  • 相关阅读:
    python 生成器 迭代器
    廖---高级特性 切片 迭代 列表生成式
    汉诺塔
    廖---函数
    廖---控制流
    廖---list tuple dic set
    廖---字符串和编码
    MySQL常见的三种存储引擎
    mysql悲观锁以及乐观锁总结和实践
    数据库事务的四大特性以及事务的隔离级别
  • 原文地址:https://www.cnblogs.com/coderkl/p/4320324.html
Copyright © 2011-2022 走看看