C语言中的数据类型以及数据类型的长度,signed与unsigned的区别,变量的类型,算术运算符中的除法运算符和取模运算符

数据类型

在C语言中的数据类型分为两个大类:内置类型和自定义类型,而在这两类的下面还细分出其他数据类型(如下图)。

内置类型就是C语言自带的类型,包含字符型(char),整型(int,short,long),浮点型(float,double),以及布尔类型(_Bool/_bool)。

自定义类型显而易见就是自己定义的数据类型,主要包括数组,结构体(struct),枚举(enum),联合体(union)。

我们看到整型和浮点型下又有了其他分支,而它们的区别就在于储存数据的大小不同。

布尔类型是一类特殊的数据类型,专门用来表示真和假的(在C语言中,0表示假,非0表示真),

使用布尔类型必须包含头文件<stdbool.h>

各种类型的长度

为了求出每一种数据类型的长度(及储存数据的大小),需要利用到一个库函数---sizeof。

可以看到,每种类型的长度大小都存在区别,这些长度的单位是1个字节(byte),但是计算机最小的储存单位是bit。计算机中的单位之间的关系:1 byte=8 bit,1 KB = 1024 byte,1 MB = 1024 KB,1 GB = 1024 MB,1 TB = 1024 GB,1 PB = 1024 TB......这些类型的长度不同就意味着它们储存着大小不同的数据,一个字符只占一个字节,而一个整型占4个字节,也就是32个bit,可以储存相当大的一个很大的数了。

关于sizeof这个库函数,我们不仅可以这样使用,还有其他的形式来使用:当sizeof括号里面是变量名的时候,sizeof的括号可以省略。

但当括号里面是类型的时候,括号不可以省略。

sizeof这个库函数有一个我们初学者易犯错的点:sozeof后面的表达式是不真实参与运算的,只是根据表达式的类型来得出大小。​​​​​​

我们可以看到sizeof后面的表达式b=a+2并没有执行,b的值依旧是2,而又因为b是short型,所有sizeof的结果也是2。

signed与unsigned的区别

signed与unsigned在名字上就是有符号和无符号的区别,这个符号是什么意思呢?

signed 有符号,表示一个类型带有正负号,包含负值;

unsigned 无符号,表示一个类型不带有正负号,只能表示正值。

C语言默认创建的一个变量就带有正负号,及有符号,例如:int = signed int; short = signed short ,long = signed long,signed可省略;

在创建一个无符号的变量时,unsigned不可省略。

特例:当修饰char时,char到底是signed char还是unsigned char,取决于编译器。

变量的类型

变量主要有两种:局部变量和全局变量;

通俗的讲,大括号内定义的变量都是局部变量,大括号外定义的变量都是全局变量;

全局变量顾名思义,在整个程序都可以使用,局部变量就只能在创建它的大括号内使用。

当将在main函数内创建的b变量在arr函数中使用时,编译器就会报错:未定义标识符"b",所以一个局部变量的可行域就是创建它的大括号内。

当我们创建变量的时候,我们最好可以给他一个初始值,这叫做初始化。有时我们不进行初始化的时候程序会报错,所以我们在创建变量的时候尽量进行初始化;

而当我们忘记初始化的时候,会有以下2种情况:一个局部变量不初始化,默认值是随机值;一个全局变量不初始化,默认值是0。

我们可以看到,变量a是一个全局变量,当我没给它初始化的时候,直接打印它的值就是0;而变量b是一个局部变量,当我不初始化时,程序直接报错,这是因为VS编译器太过严格,所以体现不出随机值。

注意:当全局变量与局部变量同名时,局部变量优先。

除法运算符

当除号(/)两边都是整数时,得出的结果也是整数,结果是除之后的商。3/2的结果应该是1.5,但除法运算符得出的是商,3/2商1余1,所以结果是1。

当除号两边有一个及以上个浮点数的时候,得出的结果也是浮点数。浮点数的打印用%f

%f打印浮点数的时候,默认小数点后6位。可以用%.nf来控制打印的小数位数。

取模运算符

取模的符号是%,%的两边必须是整数,取模的结果是两数相除之后的余数。3除2商1余1,故,3%2的结果是1

负数求模的规则是:结果的正负号由第一个操作数的正负号决定。

  • 33
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值