C语言数据类型

C语言具有多种数据类型,用于存储不同类型的数据。大体可以分为基本数据类型和派生数据类型两大类。

一、基本数据类型

  • 整型(Integer): 用于表示整数值,包括int、short、long和long long等类型,可以有不同的存储大小和范围。
  • 浮点型(Floating-point): 用于表示实数值,包括float、double和long double等类型,可以有不同的精度和范围。
  • 字符型(Character): 用于表示单个字符,通常使用char类型。
  • 布尔型(Boolean): 用于表示真或假,C99标准引入了_Bool类型,通常用bool宏表示。
  • 空类型(Void): 表示无类型,通常用于函数返回值或指针类型。

在这里插入图片描述

二、派生数据类型

  • 指针(Pointer): 用于存储变量的地址,可以指向不同类型的数据。
  • 数组(Array): 用于存储相同类型的多个数据元素。
  • 结构体(Structure): 用于将不同类型的数据组合成一个自定义的数据类型。
  • 联合体(Union): 与结构体类似,但所有成员共享同一块内存,用于节省空间。
  • 枚举(Enumeration): 用于定义一组命名的整数常量。

在这里插入图片描述

三、题目

3.1 下面代码运行输出的结果是多少?

#include<stdio.h>
int main(void) {
    unsigned char u8a = 256; 
    printf("u8a = %d",u8a);
    return 0;
}

参考答案:在C语言中, unsigned 表示无符号,即该类型的值只能是正整数或零,而 char 表示字符,一个字节,即8位。所以取值范围为:[0, 2^8] = [0, 255]。因为它只有8位。当你将一个大于255的值(比如256)赋给 unsigned char 类型的变量时,会发生截断,只保留最低8位的值。

256的二进制:1 0000 0000

在这里插入图片描述

3.2 signed char 的数据范围是多少,为什么?

参考答案:signed char 表示有符号的8位字符,一个字节。值范围是 -128 到 127。

我们知道,signed 修饰的话,最高就是符号位:1代表负数,0代表整数。

正数的最大值就是:0111 1111 ,也即 64+32+16+8+4+2+1=127

我们还知道负数在计算机当中是以补码形式存在的。

为什么会引入补码呢?
因为计算机使用补码表示法来表示有符号整数,它有助于简化整数的加法和减法运算,并且不需要额外的操作来处理负数。

并规定正数三码合一:原码 = 反码 = 补码
负数最高位位符号位,原码 = 符号位 + 其正数的数值位

反码:符号位不变,数值位逐一取反。

补码:反码+1

对于有符号的8位二进制补码数,最高位是符号位,剩下的 7 位用于表示绝对值。因此,范围是 10000000(-128)到 01111111(127)

原码: 1000 0000
反码: 1111 1111
补码: 1000 0000

-128的原码是为什么会是1000 000 是有发生截断的。(个人理解)

3.3 0的原码、反码和补码

对于数字 0,它的原码、反码和补码都是相同的,因为在有符号的二进制表示中,0 是唯一一个没有正负号之分的数。以下是如何计算 0 的原码、反码和补码:

  1. 原码(Sign-Magnitude):
    原码是直接使用二进制表示数的绝对值,并在最高位添加符号位(0 表示正数,1 表示负数)。

0 的原码是:00000000

  1. 反码(Ones’ Complement):
    反码是将原码中除符号位外的每个位取反(0 变为 1,1 变为 0)。

0 的反码是:11111111

  1. 补码(Two’s Complement):
    补码是在反码的基础上加 1。

0 的补码是:00000000

对于 0,原码、反码和补码都是相同的二进制表示,都是 00000000。在计算机中,0 表示为全 0 的二进制序列,无论是在原码、反码还是补码中,都没有正负号之分。

3.3 不同的系统上,类型所占据的字节长度是不同的

数据类型在不同编译器上占据的字节长度可能会有所不同,主要是由于编译器和计算机体系结构的差异导致的。以下是一些原因:

计算机体系结构: 不同的计算机体系结构(如 32 位、64 位等)对数据的处理方式不同。例如,64 位系统的处理器通常支持更大的数据寻址和处理能力,因此可以容纳更大的数据类型。而 32 位系统可能会限制数据类型的大小。

编译器实现: 不同的编译器可能使用不同的优化策略、数据对齐方式等来处理数据类型。这可能导致不同的编译器在内存布局上有所不同,进而影响数据类型的字节长度。

操作系统: 操作系统也可能影响数据类型的字节长度。例如,某些操作系统可能在不同数据类型之间保持特定的对齐方式,以提高访问速度。这可能会影响数据类型的大小。

标准规范: C 语言标准规范并没有明确规定数据类型在不同编译器上的精确大小,只是给出了最小的要求。因此,编译器实现者可以在符合标准的前提下进行适当的调整。

历史和遗留问题: 一些历史因素和遗留代码可能会影响数据类型在不同编译器上的大小。一些编译器可能会保持对旧代码的兼容性,因此可能会在数据类型大小方面存在差异。

综上所述,数据类型在不同编译器上占据的字节长度差异主要源自计算机体系结构、编译器实现、操作系统和历史因素等多个因素的综合影响。在编写跨平台代码时,需要格外注意数据类型的大小和兼容性。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/70368.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AI:03-基于深度神经网络的低空无人机目标检测图像识别的研究

文章目录 数据集收集与预处理深度神经网络模型设计模型训练与优化目标检测与图像识别代码实现:实验结果与分析讨论与展望低空无人机的广泛应用为许多领域带来了巨大的潜力和机会。为了实现无人机的自主导航和任务执行,准确的目标检测和图像识别是至关重要的。本文旨在研究并提…

软件外包开发的VUE开发框架

Vue.js&#xff08;通常简称为Vue&#xff09;是一个流行的渐进式JavaScript框架&#xff0c;用于构建用户界面。它的核心库专注于视图层&#xff0c;但也可以结合其他库和工具来构建完整的单页面应用&#xff08;SPA&#xff09;。以下分享Vue.js的开发框架和特点&#xff0c;…

剑指offer-1.1C++

sizeof空类问题 问&#xff1a;定义一个空的类型&#xff0c;里面没有任何成员变量和成员函数。对该类型求sizeof&#xff0c;得到的结果是多少&#xff1f; 答&#xff1a;1 问&#xff1a;为什么不是0&#xff1f; 答&#xff1a;空类型的实例中不包含任何信息&#xff0…

小说推文怎么做详细教程。小说推文项目拆解及分享

科思创业汇 大家好&#xff0c;这里是科思创业汇&#xff0c;一个轻资产创业孵化平台。赚钱的方式有很多种&#xff0c;我希望在科思创业汇能够给你带来最快乐的那一种&#xff01; 如何制作小说推文的详细教程&#xff01; 我做自媒体已经五年了&#xff0c;在自媒体行业也…

STM32CubeMX之freeRTOS消息队列

创建一个消息队列&#xff0c;两个发送任务&#xff0c;一个接受任务 发送任务一&#xff1a;等待时间为0 发送任务二&#xff1a;等待时间为最大 接受为0 简单来说就是&#xff1a; 任务一&#xff1a;一个普写 一个死写 一个普读 任务二&#xff1a;创造队列 一个普写 …

什么是React?React与VU的优缺点有哪些?

什么是React&#xff1f;什么是VUE&#xff1f; 维基百科上的概念解释&#xff0c;Vue.js是一个用于创建用户界面的开源MVVM前端JavaScript框架&#xff0c;也是一个创建单页应用的Web应用框架。Vue.js由尤雨溪&#xff08;Evan You&#xff09;创建&#xff0c;由他和其他活跃…

Scractch3.0_Arduino_ESP32_学习随记_IO中断(六)

IO中断 目的器材程序联系我们 目的 ESP32 IO中断的使用。 中断&#xff1a; 当IO中断事件发生时&#xff0c;MCU将优先执行中断的程序。 打个比方&#xff1a; 你正在读一本书&#xff0c;突然手机收到一条紧急消息。你不想错过这个重要的消息&#xff0c;所以你立即停下手中的…

MySQL高阶知识点

MySQL 文章目录 MySQLchar和varchar的区别视图视图的特点 存储过程存储过程的特点 触发器触发器的特点 MySQL引擎索引为什么要有索引呢&#xff1f;什么是索引索引的优势索引的劣势索引类型索引种类组合索引最左前缀原则索引创建原则B树和B树的区别数据库为什么使用B树而不是B树…

伪类和伪元素有何区别?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 伪类&#xff08;Pseudo-class&#xff09;⭐ 伪元素&#xff08;Pseudo-element&#xff09;⭐ 区别总结⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前…

原始套接字编程(AF_PACKET+SOCK_RAW)模拟一个PING

1. 背景 最近看一个客户的代码片段&#xff0c;发现他在用原始套接字编程&#xff0c;一般学习套接字都是流式套接字和数据报套接字&#xff0c;本来也不是搞网络的&#xff0c;原始套接字了解得很少&#xff0c;借着这次机会&#xff0c;自己来学习一下原始套接字编程。 2. …

Nevron Vision for .NET Crack

Nevron Vision for .NET Crack NET Vision是一个用于创建具有数据可视化功能的强大数据表示应用程序的套件。该套件具有用于.NET的Nevron Chart、用于.NET的Nevron Diagram和用于.NET的Nevron User Interface。精心设计的对象模型、众多功能和高质量的演示使复杂数据的可视化变…

IntelliJ IDEA如何重新弹出git身份验证窗口

1、点击File菜单—>点击Settings—>点击Appearance & Behavior—>点击System Settings—>点击Passwords—>选中Do not save, forget passwords after restart—>点击Apply—>点击OK&#xff0c;如下所示&#xff1a; 2、重启IntelliJ IDEA—>通过g…

若依管理系统后端将 Mybatis 升级为 Mybatis-Plus

文章目录 说明流程增加依赖修改配置文件注释掉MybatisConfig里面的Bean 代码生成使用IDEA生成代码注意 Controller文件 说明 若依管理系统是一个非常完善的管理系统模板&#xff0c;里面含有代码生成的方法&#xff0c;可以帮助用户快速进行开发&#xff0c;但是项目使用的是m…

Linux 编译CEF源码详细记录

Linux CEF&#xff08;Chromium Embedded Framework&#xff09;源码下载编译 背景 由于CEF默认的二进制分发包不支持音视频播放&#xff0c;需要自行编译源码&#xff0c;将ffmpeg开关打开才能支持。这里介绍的是Linux平台下的CEF源码下载编译过程。 Windows平台参考&#…

包装类+初识泛型

目录 1 .包装类 1.1 基本数据类型对应的包装类 1.2.1装箱 ​1.2.2拆箱 2.初识泛型 2.1什么是泛型 2.2泛型类 2.3裸类型 2.4泛型的上界 2.5泛型方法 1 .包装类 基本数据类型所对应的类类型 在 Java 中&#xff0c;由于基本类型不是继承自 Object &#xff0c;为了在泛型…

腾讯云服务器地域有什么区别怎么选择?

腾讯云服务器地域有什么区别&#xff1f;怎么选择比较好&#xff1f;地域选择就近原则&#xff0c;距离地域越近网络延迟越低&#xff0c;速度越快。关于地域的选择还有很多因素&#xff0c;地域节点选择还要考虑到网络延迟速度方面、内网连接、是否需要备案、不同地域价格因素…

C++11语法笔记

文章目录 一.类中新增的默认成员函数:移动赋值和移动构造二.lambda表达式三.包装器bind函数 一.类中新增的默认成员函数:移动赋值和移动构造 二.lambda表达式 三.包装器 bind函数

vue3 table动态合并,自定义参数合并单元格

<template><div><el-table :data"tableData" :span-method"objectSpanMethod" border:header-cell-style"{ textAlign: center}"><el-table-column prop"area" label"区域" align"center"&g…

红帽8.5 ansible 安装和部署 |(简单版)

安装 配置yum仓库&#xff1a; vim /etc/yun.repo.d/aliyun.repo [AppStream] nameApp baseurlhttps://mirrors.aliyun.com/centos/8-stream/AppStream/x86_64/os gpgcheck0[BaseOS] namebase baseurlhttps://mirrors.aliyun.com/centos/8-stream/BaseOS/x86_64/os gpgcheck…

Vue+SpringBoot项目开发:登录页面美化,登录功能实现(三)

写在开始:一个搬砖程序员的随缘记录上一章写了从零开始VueSpringBoot后台管理系统&#xff1a;Vue3TypeScript项目搭建 VueTypeScript的前端项目已经搭建完成了 这一章的内容是引入element-plus和axios实现页面的布局和前后端数据的串联&#xff0c;实现一个登陆的功能&#x…