C语言数据类型

发布于:2022-11-09 ⋅ 阅读:(11) ⋅ 点赞:(0) ⋅ 评论:(0)

C语言数据类型

目录

C语言数据类型

常量

变量

存储关系

进制转换(万能:程序员计算器)

原码反码补码移码

数据的真实存储

作业

进制转换小程序


常量

  • 什么是常量: 日常使用的一些固定值,这些值是不改变

  • 整形常量

    • 普通整形常量:1,2,3,4...

    • 无符号整形常量: 1u 没有负数

    • 长整形常量: 1L

    • 短整型常量:没有特殊表达方式

  • 字符常量

    • 字符边界符 '' 字符A:'A' 只有一个字符

    • 转义字符:由斜杠+特殊字符组成,打印会有一些特殊效果(格式类,或者效果类)

      转义字符 含义
      \n 换行键
      \r 回车键(回到本行第一个位置)
      \t tab键
      \a 响铃
      \ddd 三位八进制数
      \xhh 十六进制
  • 实数形(小数或者整数)常量

    • 单精度实数形常量: 1.11f

    • 双精度实数形常量

      • 随便写一个小数,它默认是双精度类型

    • 科学计数法

      • 3.14E-3(3.14*10^-3)

  • 字符串常量:多个字符组成,有特定字符(斜杠0)作为结束标记

    • 字符串边界符" " : 字符串A: "A"

      • 注意"A" 和‘A’ 是有区别的,对于"A" 来说里面有两个字符,一个‘A’ 后面还有一个看不到'\0'

      • 每一个字符串后面必定存在一个字 符串结束标记

变量

  • 什么是变量: 就是可以改变的量,通常情况可以把变量理解一个容器(装东西的物件:水果篮子)

  • 如何产生一个变量

    • 变量定义语法: 类型 变量名

      int iNum;
      int iNum=0;     //初始化
  • C语言基本数据类型

    • 整形: int int iNum

    • 单精度浮点形: float float fNum

    • 双精度浮点形: double double dNum

    • 字符类型: char char cNum

  • 一些修饰类型的关键

    • unsigned 和signed: 无符号, 一般不做说明,都是有符号(signed)

      • unsigned int: 无符号整形

      • unsigned char; 无符号字符形

      • 注意点: 不能修饰浮点形 不存在 :unsigned float

    • short和long: 短和长,体现在内存上

      • short int:

      • long int:

      • long long int:

      • 注意点: 用来修饰整形的

    • 特殊修饰词

      • const修饰

        • 创建时必需初始化(vs2022做了优化可以不初始化)

        • 值不能修改

      • static修饰

        • 初始化代码只执行一次

        • 保存程序上一次运行结果

      • extern:修饰外部变量

存储关系

  • 二进制与存储关系

    1B=8b

  • 数据类型所占内存问题

进制转换(万能:程序员计算器)

  • 十进制转其他进制:短除法

  • 其他进制转十进制:加权法

原码反码补码移码

编码规则

有符号数的编码规则

原码:最高位为符号位

反码:

  • 正数:反码与补码相同

  • 负数:符号位不变,其余位对原码取反

补码:

  • 正数:补码与原码相同

  • 负数:对反码加一

移码:

对补码符号位取反

3+5
11+101=1000

数据的真实存储

  • 大小端

    • 高地址与低地址

    • 高字节与低字节

网络数据:大端模式的数据

  • 应用场景

    面试题:写程序判断存储方式

作业

1、把二进制 101000000111011011000转换为 十进制 八进制 十六进制的数,要有过程。

二进制 :1 0 1 0 0 0 0 0 0 1 1 1 0 1 1 0 1 1 0 0 0(21)

十进制 :2^20 +2^18+2^11+2^10+2^9+2^7+2^6+2^4+2^3

八进制(三位二进制): 5 0 0 7 3 3 0 (500733)

十六进制(八位) : 1 4 0 E D 8(140ED8)

2、尝试写出 9-13=-4 的二进制计算过程。

0000 1001 (9原码)


1000 1101 --->(-13原码)

1111 0010 --->(-13反码)

1111 0011 --->(-13补码)


0000 1001 (9补码)

1111 0011 (-13补码)

相加


1111 1100 --->(结果补码)

1111 1011 --->(结果反码)

1000 0100 --->(结果原码)

得结果为 -4

进制转换小程序

#include<stdio.h>
#include<stdlib.h>
#define N 64        //64位
int arr[N] = { 0 };     //用数组装二进制,八进制
int temp = 0;           //记录二进制串大小
char Arr[N] = { 48 };   //字符数组装十六进制,根据ASCII码表操作
​
//十进制转二进制
int ten_Two(int iNum)
{
    if (iNum < 0)
    {
        iNum = -iNum;
        while (1)
        {
            arr[temp] = iNum % 2;
            iNum /= 2;
            if (iNum == 0)
                break;
            temp++;
        }
        printf("二进制:");
        printf("1");
        for (int i = temp; i >= 0; i--)
        {
            printf("%d", arr[i]);
        }
        printf("\n");
    }
    else
    {
        while (1)
        {
            arr[temp] = iNum % 2;
            iNum /= 2;
            if (iNum == 0)
                break;
            temp++;
        }
        printf("二进制:");
        for (int i = temp; i >= 0; i--)
        {
            printf("%d", arr[i]);
        }
        printf("\n");
    }
}
​
//十进制转八进制
int ten_Eight(int iNum)
{
    while (1)
    {
        arr[temp] = iNum % 8;
        iNum /= 8;
        if (iNum == 0)
            break;
        temp++;
    }
    printf("八进制:");
    for (int i = temp; i >=0; i--)
    {
        printf("%d", arr[i]);
    }
    printf("\n");
}
​
//十进制转十六进制
int ten_Sixteen(int iNum)
{
    while (1)
    {
        Arr[temp] = iNum % 16 + 48;         //ASCII码表中48-57表示0-9
        iNum /= 16;
        if (iNum == 0)
            break;
        temp++;
    }
    for (int i = 0; i <= temp; i++)
    {
        if (Arr[i] == 58)               //10-15由A-F表示
            Arr[i] = 'A';
        if (Arr[i] == 59)
            Arr[i] = 'B';
        if (Arr[i] == 60)
            Arr[i] = 'C';
        if (Arr[i] == 61)
            Arr[i] = 'D';
        if (Arr[i] == 62)
            Arr[i] = 'E';
        if (Arr[i] == 63)
            Arr[i] = 'F';
    }
    printf("十六进制:");
    printf("0x");                   //十六进制标准
    for (int i = temp; i >= 0; i--)
    {
        printf("%c", Arr[i]);
    }
    printf("\n");
}
//菜单
void Menu()     
{
    printf("**************************\n");
    printf("****1.十进制转二进制******\n");
    printf("****2.十进制转八进制******\n");
    printf("****3.十进制转十六进制****\n");
    printf("**************************\n");
}
​
//按键控制
void Key()
{
    int useKey = 0;
    int iNum = 0;
    scanf_s("%d", &useKey);
    switch (useKey)
    {
    case 1:
        printf("请输入十进制数:\n");
        scanf_s("%d", &iNum);
        ten_Two(iNum);
        break;
    case 2:
        printf("请输入十进制正数:\n");
        scanf_s("%d", &iNum);
        ten_Eight(iNum);
        break;
    case 3:
        printf("请输入十进制正数:\n");
        scanf_s("%d", &iNum);
        ten_Sixteen(iNum);
        break;
    default:
        printf("输入错误,请重新输入!!!\n");
        return Key();
    }
}
​
int main()
{
    Menu();
    Key();
    system("pause");
    system("cls");
    return 0;
}