C语言数据类型详解及相关题——各种奇奇怪怪的偏难怪
文章目录
- 一、C语言基本数据类型
- 溢出
- 二、存储原理
- 符号位
- 原码
- 反码
- 补码
- 补码操作的例子
- 三、赋值中的类型转换
- 常见返回类型——巨坑
- 总结
一、C语言基本数据类型

溢出
因为数据范围(即存储单元的位的数量)的限制,可以表达的位数是有限的。
溢出分为正溢出和负溢出,原理都是相近的。
溢出会发生截断,将从右往左数超过数据范围的位全部丢弃。
就会出现最大的正数+1就变成了最大的负数这种情况,或者最小的负数-1变成了最大的正数。
例:
//程序结果为?
int main()
{ unsigned char a, b, c, d;a = 30;b = a++;c = ++a;d = 10*(a++);printf("%d %d %d\n", b, c, d);
}
正确答案为:30 32 64
主要说下D,正常算d=320超uchar了
320表示:1 0100 0000
发生截断:0100 0000 为64
二、存储原理
符号位
用二进制 0 代表正数,二进制 1 代表负数。用第一个一个二进制位单独代表符号
原码
符号位加上整数的绝对值的组合。
反码
是每个二进制位变为相反的值。
正整数的反码是原码本身。
负整数是要处理的,其中符号位的 1 不参加反码处理,符号位以外的各个位都要按位取反。
补码
如果是正整数,那么补码还是原码本身。可如果是负整数则在上一个(反码)的基础上再补加一个二进制的 1
最终计算机存储起来的是补码后的结果。
补码操作的例子
补码存储这点很重要!做题时候很多时候就会忘。
比如:-1的原码理论上应该是:1000 0001,但是在计算机中应该是1111 1111(补码存储)
还有那个~x=-x-1公式中,这个-x指的也是补码。
例如-1的~x是0000 0000,而-x=0000 0001,则-1即为答案。
例:
//以下代码的执行结果是().
int main(){int i=-2147483648;return printf("%d,%d,%d,%d",~i,-i,1-i,-1-i);
}
正确答案为:2147483647,-2147483648,-2147483647,2147483647
解释:
-2147483647补码为:1000 0000 0000 0000 0000 0000 0000 0001
-1 补码为:1111 1111 1111 1111 1111 1111 1111 1111
-2147483648补码为:1000 0000 0000 0000 0000 0000 0000 0000 (溢出)
则:
~i就是 0111 1111 1111 1111 1111 1111 1111 1111 即为:2147483647
-i为-(-2147483648)=(2147483647 + 1)
2147483647补码为:0111 1111 1111 1111 1111 1111 1111 1111
1 补码为:0000 0000 0000 0000 0000 0000 0000 0001
1000 0000 0000 0000 0000 0000 0000 0000 又是-2147483648
1-i为 (-i)+ 1 即为:1000000 00000000 00000000 00000001 求一下源码发现是-2147483647
-1-i为:1000000 00000000 00000000 00000000 + 11111111 11111111 11111111 11111111
得:01111111 11111111 11111111 11111111
为2147483647
再例:
正确答案为:
三、赋值中的类型转换
如果赋值运算符两侧的类型不一致,但都是数值型或字符型时,在赋值时自动进行类型转换。
- 将浮点型数据(包括单、双精度)赋给整型变量时,舍弃其小数部分。
- 将整型数据赋给浮点型变量时,数值不变,但以指数形式存储到变量中。
- 将一个double型数据赋给flout变量时,要注意数值范围不能溢出。
- 字符型数据赋给整型变量,将字符的ASCII码赋给整型变量。
- 将一个int, short或long型数据赋给一个char型变量,只将其低8位原封不动地送到char型变量(发生截断)。
- 有符号数与无符号数相加,有符号就会变成无符号数
例:
//求count的值
int func()
{int count = 0;unsigned int a = 1;int b = -5;while (b++ <= 5){if (a + b > 5){count++;}}return count;
}
正确答案:5
考点在于有符号数与无符号数相加,有符号就会变成无符号数
负数转成无符号数,结果等于这个负数加上无符号数的模。
-4为11111111 11111111 11111111 11111100
无符号是4294967295(其实就是有符号上限*2+1),肯定大于5
直到-1,为11111111 11111111 11111111 11111111 ,此时count=3
此时+1溢出,为0000000 00000000 00000000 00000000,小于5了
再直到5和6,这两次count++,为5
再例:
正确答案为:
常见返回类型——巨坑
有些题不明显给,通过函数和一些关键字隐含,很容易掉坑
比如:sizeof返回类型:size_t。也就是unsigned int。
getchar返回类型:int。
函数的隐含储存类型是extern,函数的形参或变量的储存类型为auto
除法运算符 “/” 两边参加运算对象都是整数,运算结果要取整
% 整除取余数运算,二个运算数必须是整型。
函数值类型的定义可以缺省,此时函数值的隐含类型是int
…待补充
总结
这就是我大概的理解,有点像我平时摞书,最近常看的书放到最顶上,不长看的书就慢慢放到底下了。
相关文章:
C语言数据类型详解及相关题——各种奇奇怪怪的偏难怪
文章目录 一、C语言基本数据类型溢出 二、存储原理符号位原码反码补码补码操作的例子 三、赋值中的类型转换常见返回类型——巨坑总结 一、C语言基本数据类型 溢出 因为数据范围(即存储单元的位的数量)的限制,可以表达的位数是有限的。 溢出…...
经典语义分割(二)医学图像分割模型UNet
经典语义分割(二)医学图像分割模型UNet 我们之前介绍了全卷积神经网络( FCN) ,FCN是基于深度学习的语义分割算法的开山之作。 今天我们介绍另一个语义分割的经典模型—UNet,它兼具轻量化与高性能,通常作为语义分割任务的基线测试模型&#x…...
三天学会阿里分布式事务框架Seata-seata事务日志mysql持久化配置
锋哥原创的分布式事务框架Seata视频教程: 实战阿里分布式事务框架Seata视频教程(无废话,通俗易懂版)_哔哩哔哩_bilibili实战阿里分布式事务框架Seata视频教程(无废话,通俗易懂版)共计10条视频&…...
C语言-简单实现单片机中的malloc示例
概述 在实际项目中,有些单片机资源紧缺,需要mallloc内存,库又没有自带malloc函数时,此时,就需要手动编写,在此做个笔录。(已在项目上使用),还可进入对齐管理机制。 直接…...
外包干了2年,技术退步明显
先说一下自己的情况,研究生,19年进入广州某软件公司,干了接近4年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…...
计算机网络面经-HTTPS加密过程
前言 在上篇文章HTTPS详解一中,我已经为大家介绍了 HTTPS 的详细原理和通信流程,但总感觉少了点什么,应该是少了对安全层的针对性介绍,那么这篇文章就算是对HTTPS 详解一的补充吧。还记得这张图吧。 HTTPS 和 HTTP的区别 显然&am…...
2024年最佳硬盘!为台式电脑、NAS等产品量身定做的顶级机械硬盘
机械硬盘(HDD)可能看起来像是古老的技术,但它们仍然在许多地方提供“足够好”的性能,并且它们很容易以同等的价格提供最多的存储空间。 尽管最好的SSD将为你的操作系统和引导驱动器提供最好的体验,并提供比HDD更好的应…...
串的匹配算法——BF算法(朴素查找算法)
串的模式匹配:在主串str的pos位置查找子串sub,找到返回下标,没有找到返回-1。 1.BF算法思想 相等则继续比较,不相等则回退;回退是i退到刚才位置的下一个(i-j1);j退到0;利用子串是否…...
数据处理分类、数据仓库产生原因
个人看书学习心得及日常复习思考记录,个人随笔。 数据处理分类 操作型数据处理(基础) 操作型数据处理主要完成数据的收集、整理、存储、查询和增删改操作等,主要由一般工作人员和基层管理人员完成。 联机事务处理系统ÿ…...
【力扣100】 118.杨辉三角
添加链接描述 思路: 递推公式是[n,x][n-1,x-1][n-1,x] class Solution:def generate(self, numRows: int) -> List[List[int]]:if numRows1:return [[1]]if numRows2:return [[1],[1,1]]res[[1],[1,1]]for i in range(2,numRows): # i代表的是层数的下标&…...
好物周刊#44:现代终端工具
https://github.com/cunyu1943 村雨遥的好物周刊,记录每周看到的有价值的信息,主要针对计算机领域,每周五发布。 一、项目 1. Github-Hosts 通过修改 Hosts 解决国内 Github 经常抽风访问不到,每日更新。 2. 餐饮点餐商城 针对…...
每日五道java面试题之springMVC篇(一)
目录: 第一题. 什么是Spring MVC?简单介绍下你对Spring MVC的理解?第二题. Spring MVC的优点第三题. Spring MVC的主要组件?第四题. 什么是DispatcherServlet?第五题. 什么是Spring MVC框架的控制器? 第一题. 什么是S…...
【GStreamer】basic-tutorial-4:媒体播放状态、跳转seek操作
【目录】郭老二博文之:图像视频汇总 1、示例注释 #include <gst/gst.h>typedef struct _CustomData {GstElement *playbin; /* 本例只有一个元素*/gboolean playing; /* 是否处于播放状态? */gboolean terminate;...
IPSEC VPN 网关模式实验
要求:FW1与FW3建立IPSEC通道,保证10.0.2.0/24网段能访问192.168.1.0/24网段 因为FW1与FW3都处于边界,所以使用网关部署模式来建立IPSEC VPN FW1 这里选择主模式跟隧道模式 FW3与FW1配置类似,与FW1的源目地址反过来,…...
想在Vue中使用v-for来循环遍历一组对象,但只循环三次
想在Vue中使用v-for来循环遍历一组对象,但只想循环三次,你可以通过一些方法来达到这个目的。下面是一些建议的方法: 1. 使用数组的切片方法 如果你的对象是在一个数组中,你可以使用数组的slice()方法来只取数组的前三个元素。 v…...
Blazor系统教程(.net8)
Blazor系统教程 1.认识 Blazor 简单来讲,Blazor旨在使用C#来替代JavaScript的Web应用程序的UI框架。其主要优势有: 使用C#编写代码,这可提高应用开发和维护的效率利用现有的NET库生态系统受益于NET的性能、可靠性和安全性与新式托管平台(如…...
Day15:技术架构、Maven、Spring Initializer、Spring全家桶、Spring IoC
侧重于服务端(后端),不在意前端,了解一些前端即可) 技术架构 (把Spring设计的更简单好用了就是Spring Boot) 开发环境(Maven) Maven maven通过brew安装的目录为&#x…...
[c/c++] const
const 和 #define 的区别 ? const 和指针一块出现的时候,到底谁不能修改 ? const 和 volatile 能同时修饰一个变量吗 ? const 在 c 中的作用 ? 1 const 和 #define 的区别 const 和 #define 的相同点: (1) 常数 const 和 #define 定…...
生成商品条码
php生成商品条码,编码格式为:EAN13 下载第三方包:composer require codeitnowin/barcode 生成条码代码: $filename \Str::random(40) . .png;$barcode new BarcodeGenerator();$barcode->setText($barCode);$barcode->s…...
langchain学习笔记(十一)
关于langchain中的memory,即对话历史(message history) 1、 Add message history (memory) | 🦜️🔗 Langchain RunnableWithMessageHistory,可用于任何的chain中添加对话历史,将以下之一作为…...
IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比
在机器学习的回归分析中,损失函数的选择对模型性能具有决定性影响。均方误差(MSE)作为经典的损失函数,在处理干净数据时表现优异,但在面对包含异常值的噪声数据时,其对大误差的二次惩罚机制往往导致模型参数…...
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要: 近期,在使用较新版本的OpenSSH客户端连接老旧SSH服务器时,会遇到 "no matching key exchange method found", "n…...
手机平板能效生态设计指令EU 2023/1670标准解读
手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读,综合法规核心要求、最新修正及企业合规要点: 一、法规背景与目标 生效与强制时间 发布于2023年8月31日(OJ公报&…...
tauri项目,如何在rust端读取电脑环境变量
如果想在前端通过调用来获取环境变量的值,可以通过标准的依赖: std::env::var(name).ok() 想在前端通过调用来获取,可以写一个command函数: #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...
API网关Kong的鉴权与限流:高并发场景下的核心实践
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 引言 在微服务架构中,API网关承担着流量调度、安全防护和协议转换的核心职责。作为云原生时代的代表性网关,Kong凭借其插件化架构…...
Qt的学习(一)
1.什么是Qt Qt特指用来进行桌面应用开发(电脑上写的程序)涉及到的一套技术Qt无法开发网页前端,也不能开发移动应用。 客户端开发的重要任务:编写和用户交互的界面。一般来说和用户交互的界面,有两种典型风格&…...
FTXUI::Dom 模块
DOM 模块定义了分层的 FTXUI::Element 树,可用于构建复杂的终端界面,支持响应终端尺寸变化。 namespace ftxui {...// 定义文档 定义布局盒子 Element document vbox({// 设置文本 设置加粗 设置文本颜色text("The window") | bold | color(…...
英国云服务器上安装宝塔面板(BT Panel)
在英国云服务器上安装宝塔面板(BT Panel) 是完全可行的,尤其适合需要远程管理Linux服务器、快速部署网站、数据库、FTP、SSL证书等服务的用户。宝塔面板以其可视化操作界面和强大的功能广受国内用户欢迎,虽然官方主要面向中国大陆…...
Pandas 可视化集成:数据科学家的高效绘图指南
为什么选择 Pandas 进行数据可视化? 在数据科学和分析领域,可视化是理解数据、发现模式和传达见解的关键步骤。Python 生态系统提供了多种可视化工具,如 Matplotlib、Seaborn、Plotly 等,但 Pandas 内置的可视化功能因其与数据结…...
