### C语言关键字浅析系列 ###
### ISO/ANSI C 关键字 ###
unsigned意为“没有标记过的”,在C语言中表示无符号的,与关键字signed对应
这个关键字在很多头文件的变量定义中还是很常见的,一般用在整数类型的符号说明处
unsigned的作用是:
声明无符号的整数类型。
1、再谈整数类型的存储
如果你有看过我博客中关于int、short、long或signed关键字的文章,应该对整数类型的存储有些印象
计算机中对于数据的存储都是二进制的形式,整数类型是原理相对比较简单的一种,以32位int类型为例
一般的,一个4byte空间存储的二进制数要表示一个数字,其值应该根据int的符号类型而定
因为同样的存储状态在有无符号的类型下可能表示两个不同的值(详见相关文章C语言关键字浅析-signed)
而signed和unsigned的区别基本就在于,是否把存储的某一位看做符号位,unsigned时不看符号位,所以unsigned一般表示的是非负数
如果系统中的C是16位int的,那么signed int能表示-32768 ~ 32767,而unsigned int能表示0 ~ 65535,正数上的区间更大
2、unsigned的使用
和signed类似,unsigned一般加在int等整数类型名称前:
/* unsigned可以修饰的几种类型 */
unsigned int a; /* 无符号整型 */
unsigned short b; /* 无符号短整型 */
unsigned long c; /* 无符号长整型 */
unsigned long long d; /* 无符号long long类型 */
引入signed和unsigned的概念后,就要严格注意输入输出时候的格式了(详解见相关文章-signed关键字):
printf("%d, %u", a, b); /* %u是unsigned类型的说明符 */
printf("%u, %d", a, b); /* 如果对signed类型的变量用%u,那就不会去找内存中的符号位,全部当数字位处理 */
/* 这时显示的结果可能与signed本身想表达的值差异很大,数字0情况除外 */
unsigned short c = 4;
printf("%hu"); /* %h是短整型,%hu表示无符号短整型 */
unsigned long d = 5;
printf("%lu"); /* %l是长整型,%lu表示无符号长整型 */
对于long和long long常量,能使用后缀直接给出unsigned的属性:
120L; /* L后缀表示long常量 */
120LU; /* 再加上U后缀表示unsigned */
120LLU; /* LLU表示unsigned long long */
120ull; /* ull这样写也对 */
——参考《C Primer Plus第五版》
相关文章: