本文主要是介绍关键字之signed和unsigned,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
生活中的我们发现数据只有正数,比如:年龄,体重,等,但有些数据是有正负数的,比如:温度,海拔等,那么C语言中如何表达正负数呢?
1.signed和unsigned
C语言引入signed和unsigned关键字来修饰char、short、int、long等整型家族的类型。
使用signed关键字,表示一个类型带有正负号,包含负值。
使用unsigned关键字,表示该类型不带有正负号,只能表示零和正整数。
1char
2[signed]char
3unsigned char
4//短整型
5short [int]
6[signed] short [int]
7unsigned short [int]
8//整型
9int
10[signed] int
11unsigned int
12//长整型
13long [int]
14[signed] long [int]
15unsigned long [int]
16//更长的整型
17//c99中引入
18long long [int]
19[signed] long long [int]
20unsigned long long [int]
2.int类型
对于int类型,默认是带有正负号的,也就是说int等同于signed int。
由于这是默认情况,关键字signed一般都省略不写,但写了也不算错。
1 signed int a;
2 //等同于int a;
3//有符号整数的输入输出格式是%d
int类型也可以不带正负号,只表示非负整数。这时就必须使用关键字unsigned声明变量。
1 unsigned int a;
2//无符号整数输入输出的格式%u
整数变量声明为unsigned的好处是,同样长度的内存能够表示的最大整数值,增大了一倍。比如,16位的signed short int的取值范围是:-32768~32767,最大值是32767;而unsigned short int的取值范围是:0~65535,最大值增大到了65,535。
32位的signed int的取值范围可以参看limits.h中给出的定义。
下面的定义是vs2022环境中,limits中相关的定义。
1#define SHRT_MIN (-32768) //有符号16位整形的最小值
2#define SHRT_MAN 32767 //有符号16位整形的最大值
3#define SHRT_MAN 0xffff //无符号16位整形的最大值
4#define SHRT_MIN (-2147483647 - 1) //有符号16位整形的最小值
5#define SHRT_MAN 2147483647 //有符号16位整形的最大值
unsigned int里面的int可以省略,所以上面的变量声明也可以写成下面这样。
1unsigned a;
3.特殊的char类型
字符类型char也可以设置signed和unsigned。
1 signed char a;//范围为-128到127
2 unsigned char a;//范围为0到255
注:C语言规定char类型默认是否带有正负号,由当前系统决定。
这就是说,char不等同于signed char,它有可能是signed char,也可能是unsigned char这一点与int不同,int就等同于signed int。
完
这篇关于关键字之signed和unsigned的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!