C语言数据类型详解及相关题——各种奇奇怪怪的偏难怪

news2024/10/24 12:34:01

文章目录

  • 一、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

再例:


正确答案为:

三、赋值中的类型转换

如果赋值运算符两侧的类型不一致,但都是数值型或字符型时,在赋值时自动进行类型转换。

  1. 将浮点型数据(包括单、双精度)赋给整型变量时,舍弃其小数部分。
  2. 将整型数据赋给浮点型变量时,数值不变,但以指数形式存储到变量中。
  3. 将一个double型数据赋给flout变量时,要注意数值范围不能溢出。
  4. 字符型数据赋给整型变量,将字符的ASCII码赋给整型变量。
  5. 将一个int, short或long型数据赋给一个char型变量,只将其低8位原封不动地送到char型变量(发生截断)。
  6. 有符号数与无符号数相加,有符号就会变成无符号数

例:

//求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

…待补充

总结

这就是我大概的理解,有点像我平时摞书,最近常看的书放到最顶上,不长看的书就慢慢放到底下了。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AtCoder Beginner Contest 343(A,B,C,D,E,F)

比赛链接 CE是暴力&#xff0c;D是数据结构题&#xff0c;F是线段树。这场的E比较有意思&#xff0c;其他的感觉有点水。 A - Wrong Answer 题意&#xff1a; 给你两个数 A , B A,B A,B ( 0 ≤ A , B ≤ 9 ) (0\le A,B\le 9) (0≤A,B≤9)&#xff0c;返回一个个位数&#…

手机app制作商用系统软件开发

手机端的用户占比已经超过了电脑端的用户量&#xff0c;企业想要发展手机端的业务就必须拥有自己的app软件&#xff0c;我们公司就是专门为企业开发手机软件的公司&#xff0c;依据我们多年的开发经验为大家提供在开发app软件的时候怎么选择开发软件的公司。 手机app制…

spring-jpa

一、介绍 1.1ORM 1.2 Java Persistence API 放在javaee版本 优点 支持持久化复杂的Java对象&#xff0c;简化Java应用的对象持久化开发支持使用JPQL语言进行复杂的数据查询使用简单&#xff0c;支持使用注解定义对象关系表之间的映射规范标准化&#xff0c;由Java官 方统一规…

阿里云服务器购买搭建

1.首先在阿里云官网购买ESC云服务器 2.在域名处&#xff0c;购买域名&#xff0c;申请免费的SSL证书&#xff0c;但是这个证书需要去备案&#xff0c;这个周期比较长。 3.登录你的服务器就可以安装你需要的环境&#xff0c;进行开发&#xff0c;当然使用docker很好用。 以下…

【开源物联网平台】FastBee认证方式和MQTT主题设计

&#x1f308; 个人主页&#xff1a;帐篷Li &#x1f525; 系列专栏&#xff1a;FastBee物联网开源项目 &#x1f4aa;&#x1f3fb; 专注于简单&#xff0c;易用&#xff0c;可拓展&#xff0c;低成本商业化的AIOT物联网解决方案 目录 一、接入步骤 1.1 设备认证 1.2 设备交…

【Leetcode】3028.边界上的蚂蚁

题目描述 思路 题目中要求我们返回 蚂蚁返回到边界的次数。简单来想&#xff0c;就是蚂蚁原来的位置的一维坐标为0&#xff0c;然后经过&#xff0c;若干次移动&#xff0c;统计有几次坐标再次变为0的个数。 我们利用前缀和&#xff0c;像定义一个数组&#xff0c;算出前缀和数…

贪心算法详解及机器人运动应用Demo

一、引言 贪心算法是一种在每一步选择中都采取在当前状态下最好或最优&#xff08;即最有利&#xff09;的选择&#xff0c;从而希望导致结果是全局最好或最优的算法。贪心算法在有最优子结构的问题中尤为有效。今天&#xff0c;我们将通过一个机器人运动的Demo来详细解析贪心算…

网络编程作业day7

作业项目&#xff1a;基于UDP的聊天室 服务器代码&#xff1a; #include <myhead.h>//定义客户信息结构体 typedef struct magtye {char type; //消息类型char name[100]; //客户姓名char text[1024]; //客户发送聊天信息 }msg_t;//定义结构体存储…

基于YOLOv5的驾驶员疲劳驾驶行为​​​​​​​检测系统

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文主要内容:详细介绍了疲劳驾驶行为检测整个过程&#xff0c;从数据集到训练模型到结果可视化分析。 博主简介 AI小怪兽&#xff0c;YOLO骨灰级玩家&#xff0c;1&#xff09;YOLOv5、v7、v8优化创新&#xff0c;轻松涨点和模型轻量…

Java特性之设计模式【过滤器模式】

一、过滤器模式 概述 ​ 过滤器模式&#xff08;Filter Pattern&#xff09;或标准模式&#xff08;Criteria Pattern&#xff09;是一种设计模式&#xff0c;这种模式允许开发人员使用不同的标准来过滤一组对象&#xff0c;通过逻辑运算以解耦的方式把它们连接起来。这种类型的…

几何工具的使用

Geometry - Creation 创建几何 CogCreateCircleTool&#xff1a;创建圆CogCreateEllipseTool:创建椭圆CogCreateLineBisectPointsTool&#xff1a;带有两个点的平行线CogCreateLineParallelTool:在某一点创建某条线的平行线CogCreateLinePerpendicularTool:在某一点创建某条线…

STL中push_back和emplace_back效率的对比

文章目录 过程对比1.通过构造参数向vector中插入对象&#xff08;emplace_back更高效&#xff09;2.通过插入实例对象&#xff08;调用copy函数&#xff09;3.通过插入临时对象&#xff08;调用move函数&#xff09; 效率对比emplace_back 的缺点 我们以STL中的vector容器为例。…

力扣每日一题 找出字符串的可整除数组 数论

Problem: 2575. 找出字符串的可整除数组 文章目录 思路复杂度Code 思路 &#x1f468;‍&#x1f3eb; 灵神题解 复杂度 时间复杂度: O ( n ) O(n) O(n) 空间复杂度: O ( 1 ) O(1) O(1) Code class Solution {public int[] divisibilityArray(String word, int m){in…

外包干了一周,技术明显倒退。。。。。

先说一下自己的情况&#xff0c;本科生&#xff0c;2019年我通过校招踏入了南京一家软件公司&#xff0c;开始了我的职业生涯。那时的我&#xff0c;满怀热血和憧憬&#xff0c;期待着在这个行业中闯出一片天地。然而&#xff0c;随着时间的推移&#xff0c;我发现自己逐渐陷入…

【JavaEE初阶】 JVM 运行时数据区简介

文章目录 &#x1f343;前言&#x1f332;堆&#xff08;线程共享&#xff09;&#x1f384;Java虚拟机栈&#xff08;线程私有&#xff09;&#x1f38b;本地方法栈&#xff08;线程私有&#xff09;&#x1f333;程序计数器&#xff08;线程私有&#xff09;&#x1f334;方法…

ospf虚链路实验简述

1、ospf虚链路实验简述 ospf虚链路配置 为解决普通区域不在骨干区域旁&#xff0c;通过配置Vlink-peer实现不同区域网络设备之间建立逻辑上的连接。 实验拓扑图 r1: sys sysname r1 undo info enable int loopb 0 ip add 1.1.1.1 32 ip add 200.200.200.200 32 quit int e0/0/…

京东老矣,尚能饭否?

图片&#xff5c;《冰与火之歌》截图 ©自象限原创 作者丨程心 编辑丨罗辑 从2004年1月&#xff0c;京东正式涉足电商至今&#xff0c;整整二十年过去了。 2024年3月6日&#xff0c;京东发布了2023年第四季度及全年财报。数据显示&#xff0c;2023Q4京东收入3061亿元人民…

【软件测试】如何申请专利?

一、专利类型 在软件测试领域&#xff0c;可以申请发明专利、实用新型专利和外观设计专利。其中&#xff0c;发明专利是最常见的专利类型&#xff0c;它保护的是软件测试方法、系统和装置等技术方案。 二、申请专利的条件 申请专利需要满足新颖性、创造性和实用性三个条件。…

【Linux】开始使用gdb吧!

开始使用gdb吧&#xff01; 1 下载安装2 开始使用3 实践运用补充一下 print 的 功能 &#xff08;类似监视窗口的作用&#xff09;和显示堆栈的功能Thanks♪(&#xff65;ω&#xff65;)&#xff89;谢谢阅读&#xff01;&#xff01;&#xff01;下一篇文章见&#xff01;&am…

【力扣白嫖日记】1070.产品销售分析III

前言 练习sql语句&#xff0c;所有题目来自于力扣&#xff08;https://leetcode.cn/problemset/database/&#xff09;的免费数据库练习题。 今日题目&#xff1a; 1070.产品销售分析III 表&#xff1a;Sales 列名类型sale_idintproduct_idintyearintquantityintpriceint …