【谭浩强C程序设计精讲 2】整型数据

2023-12-21 22:38:07

3.3 整型数据

3.3.1 整型常量的表示方法

整型常量即整常数。C 的整常数可以用以下三种形式表示:

  • (1)十进制整数。

    如 123,-456,0。

  • (2)八进制整数。

    • 数字 0 开头的数是八进制数,每一位用 0-7 八个数码表示,逢八进一。

    如 0123 表示八进制数 123,即
    ( 123 ) 8 = 1 × 8 2 + 2 × 8 1 + 3 × 8 0 = 83 (123)_8=1\times 8^2+2\times8^1+3\times8^0= 83 (123)8?=1×82+2×81+3×80=83

    如 -011 表示八进制 -11,即十进制数 -9。

  • (3)十六进制整数。

    • 0x 开头的数是十六进制数,每一位用 0-9、A-F 十六个数码表示,逢十六进一。

    如 0x123,代表十进制 123,即
    ( 123 ) 16 = 1 × 1 6 2 + 2 × 1 6 1 + 3 × 1 6 0 = 291 (123)_{16}=1\times16^2+2\times16^1+3\times16^0=291 (123)16?=1×162+2×161+3×160=291

    如 -0x12 等于十进制数 -18。

3.3.2 整型变量

1. 整型数据在内存中的存放形式
  • 数据在内存中是以二进制形式存放的

  • 在实际中,数值是以补码的形式表示的。

    • 一个正数的补码和原码的形式相同。
    • 求负数的补码的方法:将该数的绝对值的二进制形式,按位取反再加 1
    int i,j;    //定义2个整型变量
    i = 10;     //给 i 赋以整数 10
    j = -10;    //给 j 赋以整数 -10
    

在这里插入图片描述

  • 由图可知,整数的16位中,最左面的一位是表示符号的,该位为0,表示数值为正;为1则数值为负

注意在16位系统中,整型才占用2个字节。在32位系统中,整型占4个字节。在不特殊说明的情况下,本书中讨论的就是16位系统。

2. 整型变量的分类
类型说明类型占位数取值范围
有符号基本整型[signed] int16-32768~32767
无符号基本整型unsigned int160~65535
有符号短整型[signed] short [int]16-32768~32767
无符号短整型unsigned short [int]160~65535
有符号长整型long [int]32-2147483648~2147483647
无符号长整型unsigned long [int]320~4294967295

例如:

  int a;              //定义有符号整型变量a
  unsigned int b;     //定义无符号整型变量b

在这里插入图片描述

3. 整型变量的定义
  • 前面已经提到,C规定在程序中所有用到的变量都必须在程序中定义,即“强制类型定义”。

  • 对变量的定义,一般放在一个函数的开头部分的声明部分,作用域在函数体内(在第7章会详细介绍)。

  • 例3.2 整型变量的定义与使用

    #include <stdio.h>
    int main(void)
    {
        int a,b,c,d;        //指定a,b,c,d为整型变量
        unsigned u;         //指定u为无符号整型变量
        a = 12; 
        b = -24; 
        u = 10;
        c = a + u;
        d = b + u;
        printf("a+u=%d,b+u=%d",c,d);
        return 1;
    }
    
    • 运行结果:a+u=22,b+u=-14
4. 整型数据的溢出
  • 一个 int 型变量的最大允许值为 32767,如果再加 1,会出现什么情况?

  • 例3.3 整型数据的溢出

    #include <stdio.h>
    int main(void)
    {
        int a,b;       
        a = 32767; 
        b = a + 1; 
        printf("a=%d,b=%d",a,b);
        return 1;
    }
    
    • 运行结果:a=32767,b=-32768

    注意:一般我们测试的编译系统是32位的,这样的话一个 int 是 4 字节,可以将例3.3程序中的 int 改成 short 就能运行出课本上的结果。

3.3.3 整型常量的类型

整型变量可分为 int、short int、long int 和 unsigned int、unsigned short、unsigned long 等类型。那么,在将一个整型常量赋值给上述几类别的整型变量时如何做到类型匹配

  • (1)一个整数在 -32768~32767 范围内,认为它是 int 型,可以赋值给 int 型和 long int 型变量。
  • (2)如果这个整数超过了上述范围,而在-2147483648~2147483647范围内,则认为它是长整形,可以将它赋值给 long int 型变量。
  • (3)一个整常量后面加一个字母 u,则认为是 unsigned int 型
    • 如 12345u,在内存中按 unsigned int 型存储。

    • 如 -12345u,则先将其转换成补码53191,然后按无符号数存储。

  • (4)在一个整常量后面加一个字母l或L,则认为是 long int 型常量。

本节完

文章来源:https://blog.csdn.net/u010916762/article/details/135140683
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。