C语言关键字浅析-unsigned

### 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第五版》

 

相关文章:

C语言关键字浅析-signed

C语言关键字浅析-int

C语言关键字浅析-short

C语言关键字浅析-long

 

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现思路: 1. 定义一个结构体,用来存储C语言关键字的中英文翻译对应关系。 2. 读取用户输入的C语言关键字。 3. 在结构体中查找对应的中英文翻译,输出结果。 代码实现: ```c #include <stdio.h> #include <string.h> // 定义结构体存储中英文翻译对应关系 struct keywords { char cn[20]; char en[20]; } keywords[] = { {"自动", "auto"}, {"双精度", "double"}, {"枚举", "enum"}, {"浮点", "float"}, {"整型", "int"}, {"长整型", "long"}, {"短整型", "short"}, {"有符号", "signed"}, {"无符号", "unsigned"}, {"结构体", "struct"}, {"联合", "union"}, {"空类型", "void"}, {"布尔类型", "bool"}, {"字符类型", "char"}, {"常量", "const"}, {"指针", "pointer"}, {"函数", "function"}, {"返回值", "return"}, {"大小", "sizeOf"}, {"静态", "static"} }; int main() { char input[20]; printf("请输入C语言关键字:"); scanf("%s", input); int i; for (i = 0; i < sizeof(keywords) / sizeof(struct keywords); i++) { if (strcmp(keywords[i].cn, input) == 0) { printf("%s 对应的英文关键字为 %s\n", keywords[i].cn, keywords[i].en); break; } else if (strcmp(keywords[i].en, input) == 0) { printf("%s 对应的中文关键字为 %s\n", keywords[i].en, keywords[i].cn); break; } } if (i == sizeof(keywords) / sizeof(struct keywords)) { printf("未找到对应的关键字!\n"); } return 0; } ``` 运行效果: ``` 请输入C语言关键字:整型 整型 对应的英文关键字为 int ``` ``` 请输入C语言关键字unsigned unsigned 对应的中文关键字为 无符号 ``` ``` 请输入C语言关键字:test 未找到对应的关键字! ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值