首页 > 其他分享 >C语言数据类型和变量(上)

C语言数据类型和变量(上)

时间:2024-11-25 10:02:38浏览次数:6  
标签:变量 int 数据类型 unsigned signed C语言 char long 类型

1. 数据类型

所谓“类型”,就是相似的数据所拥有的共同特征,编译器只有知道了数据的类型,才知道怎么操作 数据。 b66c8d4e6a954a458314cd2edf05d8a7.png 目前只需了解内置类型就可以

1.1 字符型

signed char                 有符号型字符(有正负号,字符也能正负?啥意义?先不说好吧) unsigned char             无符号型字符

1.2 整型

short (int) int long (int) long long (int) 而这四个中又都能分别加上signed 和unsigned 对于整型的有无正负还是比较好理解的 即数字的正负嘛,signed型既可以表示0和正数,还能表示负数                              unsigned型只能表示0和正数 既然signed类型功能更全,那为什么还需要unsigned? 因为在同等配置下(比如都是int),unsigned型所能存储的最大数字就是signed的两倍,因为signed型的一部分空间就留给负数了(你不会觉得只要赋的值没有负数就能让原来放负数的地方放正数吧?没那么好哈)

1.3 浮点型

什么是浮点型? 2be94b06ef9e4ae78addb39f76f83e80.png 因为小数点是可以“浮动的”,所以小数也叫浮点数, float                          单精度浮点型 double (float)           双精度浮点型 long double (float)   精度更多的浮点型 long double 的长度>=double 哈 说实话现在还不太会用这个浮点型变量,搞不清这个小数点后几位的问题。emmm,暂时先认识吧,我去搜了一下,好像区别还蛮大的我还看不懂。 附上链接: 单精度(float)和双精度(double)的区别_浮点型 双精度型数据有什么区别-CSDN博客

1.4 布尔类型

C语言中有一类值,只有真和假两种情况,在布尔类型之前, 0表示假,非0表示真 布尔类型是一种专门用来表示真假的一种数据类型,在使用的时候要包含它的专属头文件, #include<stdbool.h> 它只能赋两种值,true/false 现在新的编译器不支持_Bool的方式了,改用bool了,很人性哈。 e900067f94d4437ebde464d655611ef0.png 看示例 f6ba6d58794d42d5bd2cebf53354038a.png 会用了哈 我嘞个骚刚,搞错了,我试了一下这种情况的话,不管是true还是false都能正常打印,问题出在哪里?出在没有加上判断条件! 要加上if(a)才行 18c13b7e1b2640918da364ce5a4543bd.png 8e4f6851e9f64ca9936d20ab0a8ccc70.png 被自己逗笑了哈哈 现在才是真的会用了哈

2. 数据类型的长度

每⼀种数据类型都有自己的长度,使用不同的数据类型,能够创建出⻓度不同的变量,变量长度的不 同,存储的数据范围就有所差异。 存储空间 b3cad0b5d8764465a04518a7299d0eb7.png
2.1 sizeof 操作符
是一个关键字,也是一个操作符,是专门用来计算类型长度的,单位是字节 a6d599c9f2254f4c90bd35f379979eb5.png 但是,因为sizeof的返回值有多种可能性,在打印的时候会造成混乱,所以专门为了它而创建了一个数据类型:size_t类型,(很容易知道就是无符号整数类型,上面图片说了的嘛)专门用%zd来打印。(%d是用来打印int的,所以就是有符号整数)明白了吧。 这个size_t类型和int啊,char啊是并列关系的。 64cf0da207be48e7ae41eb4498edc60b.png size_t类型就用%zd来打印,更人性化了哈,不然你让我一个一个区分是%u还是%lu还是%llu的话,我会选择“请你的早餐吃颗子弹”。 我去,我在看第二遍的时候才意识到,原来“大”类型相同,“小”类型不同,也要用不同的占位符啊,我原本还以为 unsigned long和unsigned loonglong能用同一个占位符嘞,我靠,原来占位符这么讲究 之前用int a;然后无脑使用%d来作占位符,根本就没考虑过为什么,以为%d好像是官方认证一样,啥时候都能用, 来试试看sizeof的作用 c59d48ea8e1e4df5bf55619e7a1a5394.png 这里可能会有疑问,long int=int的长度,其实,C语言只规定: long int >=int,所以这里的=也不能算出错了好吧,如果要消除这种不确定性,一定要8个bit位,就选long long int。 6ba110389c034613a9b4d4ece78609a8.png 如果是表达式的时候,括号就可以省略 size of 后面的表达式不会真实运算,根据表达式的类型来得出 0bc75980c00b48bdb0f4eb8750f34009.png 怎么理解? 尤其是第四个和第五个的区别 要注意哈,上面说的在计算表达式的时候可以省略掉括号,是语法层面的可以,也就是说不会报错,但是省略掉之后运算逻辑会变化,也就是说分成两个部分了, printf打印的值是大圆形的值,但是大圆形里面的值是小圆形的值加上100,明白? 所以括号到底省不省略,看具体的计算要求。 通过第四个例子也能看出来,表达式是不会真的参与计算的,sizeof只管它括号里面的是什么类型,因为a是整型,100也是,所以算出来的就是整型对应的4。 再看一个关于截断的问题 58c0f7cc7fdb49f48fbe68c95fb3bebe.png 这里为了方便观看我把两个类型的宽度弄得不一样,其实应该是一样的。 短的是short,长的是int,把长的塞给短的,多出去的那一部分因为装不进去就直接被舍弃了,好理解吧,所以最后计算的就是short的长度,反之,也好理解。 cbc6682689cc433db65dd4e8d5468baa.png 但是这个第三个,跨类型的问题,我暂时还不理解哈,应该是还没学到那么深。
2.2 数据类型的取值范围
在 limits.h 文件中看整型类型的取值范围 在 float.h 文件中看浮点型类型的取值范围 虽说现在看上去好i象很不好懂,但别急,慢慢来好吧。 未来的我一定不差,因为现在的我相信我不会差

3. signed 和 unsigned 

前面其实已经介绍了,这里就只补充一下缩写的问题。 C 语⾔使⽤ signed 和 unsigned 关键字修饰 字符型和整型。

3.1 对于 int 类型

默认是带有正负号的,也就是说 int 等同于 signed int 如果要表示无正负号的,需要自己加上unsigned

3.2 对于 char 类型

C 语⾔规定 char 类型默认是否带有正负号,由当前系统决定。(看你使用的是什么编译器) 也就是说, char 不等同于 signed char ,它有可能是 signed char ,也有可能是 unsigned char, 你想具体表示有无符号,需要自己加上signed 或 unsigned 。

4. 变量

了解清楚了类型,我们使⽤类型做什么呢?类型是⽤来创建变量的。 什么是变量呢?C语⾔中把经常变化的值称为变量,不变的值称为常量。 f661f382b1dd46d4926bbea488ae0a99.png 如: int a; char b; 在创建变量的时候给变量赋一个值,就叫变量的初始化。 如: int a=1000; 变量分为两种:

4.1 全局变量

就是最大的那个括号的外面定义的变量。 df7e89478fae44c3ab03f3790308390e.png 全局变量不仅可以在开启的这个项目里面适用(这个源文件中),还可以在其他的源文件中使用, 6f8ba420bf1b47a4880102839b42b5bb.png 不过要加上申明外部符号这一个语句。 cf2abdd172394ea4abcb90177c20bf6b.png

4.2 局部变量

在括号里面定义的变量,使用范围也仅限于这个大括号里面,(也能用于这个大括号里面的小括号,懂?有点老虎不在家,猴子当大王的感觉) 全局变量和局部变量的存储位置不同 ⼀般在学习C/C++语⾔的时候,我们会关注 内存中的三个区域:栈区、堆区、静态区。 ce34c2f45acf4a198e75cb842a453e79.png 存储位置就是这样的,   局部变量是放在内存的栈区  全局变量是放在内存的静态区  堆区是⽤来动态内存管理的 后面会再详细解释。

5. 致谢

能看到这里说明你相当不容易哈,当然,能写到这里也说明我相当不容易,周六诶兄弟,今天周六!我一个大学生,周六,下午,(上午体侧),在这用费曼学习法学习,不容易哈,真累了,写完这篇得出去散散步然后锻炼锻炼了,长时间学习真不是一件美事哈。 e75dd7bcc8e0470b9ac81d46e36c58b0.png 哈哈,有被自己的创造力笑到。

标签:变量,int,数据类型,unsigned,signed,C语言,char,long,类型
From: https://blog.csdn.net/2403_89035562/article/details/143982977

相关文章

  • C语言超详细教程
    系列文章目录文章目录系列文章目录1运算符1.1算术运算符:2控制语句2.1条件语句:2.2循环语句:3函数3.1函数的定义与声明:3.2递归函数:4指针4.1指针的定义与使用函数指针:5.数组与字符串5.1数组一维数组:相同类型元素的集合(......
  • Python编程技巧:多变量赋值的优雅艺术
    在Python编程的世界里,有许多令人惊叹的语法特性,而多变量赋值就像是一颗闪耀的明珠,它不仅让代码更优雅,还能提升程序的执行效率。今天我们就深入探讨这个看似简单却蕴含深意的编程技巧。基础认识传统的变量赋值方式,我们都很熟悉:x=1y=2z=3但Python提供了一种更简洁......
  • 【C】错误的变量定义导致sprintf()‌输出错误
    问题描述刚刚写一个用AT指令透传相关的函数,需要用到sprintf()‌拼接字符串。结果发现sprintf()‌拼接出来的内容是错误的,简化后的代码如下:constcharAT_CIPSEND_FIX_LENGTH_HEADER[11]="AT+CIPSEND="; //错误的!!! constcharAT[]="AT\r\n";voidESP8285_CipSend_......
  • Python变量交换的艺术:从基础到进阶的优雅之道
    在Python编程世界里,变量交换是一个非常基础但又充满智慧的话题。让我们深入探讨这个看似简单却蕴含丰富内涵的编程技巧。基础交换方式传统编程语言中,交换两个变量的值通常需要使用临时变量:x=10y=20temp=xx=yy=tempprint(x,y)#输出:2010这种方式虽然直......
  • sed中变量引用的几种方式
    时间:2024.11.24写脚本的时候发现一个关于sed引用变量的问题变量中有空格时,赋值必须加引号[root@centos7~]#var1=NoSpace[root@centos7~]#var2=WithSpace-bash:Space:commandnotfound[root@centos7~]#var2='WithSpace'[root@centos7~]#var3="WithSpace"[r......
  • 解释 Python 中的可变与不可变数据类型?
    在Python中,数据类型分为可变(mutable)和不可变(immutable)两种。理解这两种类型的区别对于编写高效、可靠的代码至关重要。作为面试官,我会详细解释这两者的区别,并提供一些实际开发中的使用建议和注意事项。1. 不可变数据类型不可变数据类型是指一旦创建后,其值不能被修改的数......
  • 【大数据学习 | Spark-Core】广播变量和累加器
    1.共享变量Spark两种共享变量:广播变量(broadcastvariable)与累加器(accumulator)。累加器用来对信息进行聚合,相当于mapreduce中的counter;而广播变量用来高效分发较大的对象,相当于semijoin中的DistributedCache。共享变量出现的原因:我们传递给Spark的函数,如map(),或者filter()......
  • C语言_C语句_PAGE4
    C语句C语句的作用和分类一个C程序可以由若干源程序文件组成源程序文件1预处理指令数据声明函数1函数首部函数体数据声明执行语句函数2函数…函数nC语句分类控制语句//01.条件语句if()…else//02.循环语句for()…while()…do…while()contin......
  • C语言_输入输出函数_PAGE5
    数据的输入和输出printf函数输出printf(格式控制,输出表列)格式控制格式声明由%和格式字符组成格式字符d:输出有符号的十进制整数可以在格式声明中指定输出数据的域宽,%5d表示输出数据占5列c:输出一个字符charch=’a’;printf("%c",ch);//最后输出“a”charc......
  • P1125 [NOIP2008 提高组] 笨小猴 C语言
    先说思路:创建了一个函数来判断是否是质数,然后将字符串输入,因为题干中说长度小于100,再加上\0,所以要把长度定义为101,之后对每一个字母用双层循环进行遍历,外层用count来计数,若超过maxn则赋新值,minn同样,之后再对maxn-minn得到的数进行判断即可,之后根据题意用if-else语句即可完成......