关于unsigned char、unsigned short使用printf(“%d”)进行输出的结果
2015-07-16 00:11
302 查看
参考博客:C语言 unsigned 和 signed 类型相互转换深入理解
参考博客:unsigned和signed
对于unsigned 无符号数据类型是不应该向其赋值负数的,但是如果赋值了那会怎么样呢?
运行结果如下:
产生这种结果的原因是什么?uc和us在使用printf函数进行输出时都会进行类型提升,补足为4字节的int 类型(这么说可能不严谨,反正就是提升为4字节),由于uc和us都是无符号类型,所以提升的时候前面都是补0。也就是说us在内存中的存储形式是0x0000ffff,uc在内存中是0x000000ff,而ui在内存中是0xffffffff,printf函数输出什么值是和前面的数据类型符相关的,例如上面那段程序中的printf是%d,那么编译程序就按照有符号整数来对后面的变量进行解释。
相同赋值的int和usigned int在内存中的表示是一样的,signed和unsigned只是告诉程序对内存的不同解释方式,前者按照有符号数解释(考虑符号位),后者按无符号数(不考虑符号位)解释,这一点和%d,%u的作用是一样的。
%d,%u的不同就在于对内存的解释不同,前者将内存中的数据看成有符号的,后者看成是无符号的。(将signed int使用%u输出,实质就是相当于对这块内存的重新解释)。变量的输出与变量是unsigned还是unsigned无关,而取决于%d或u%等对内存的再解释
有符号类型(char)无论向有符号类型(int)还是无符号类型(unsigned int)扩展,都会按照有符号数的扩展规则(高位补符号位)。
无符号类型(unsigned char)无论向有符号类型(int)还是无符号类型(unsigned int)扩展,都会按照无符号数的扩展规则(高位补0)。
补充一张图,确实发生了类型提升
参考博客:unsigned和signed
对于unsigned 无符号数据类型是不应该向其赋值负数的,但是如果赋值了那会怎么样呢?
#include <stdio.h> #include <stdlib.h> int main() { unsigned char uc= -1; unsigned short us=-1; unsigned int ui= -1; printf("uc=%d\n",uc); printf("us=%d\n",us); printf("ui=%d\n",ui); system("pause"); return 0; }
运行结果如下:
产生这种结果的原因是什么?uc和us在使用printf函数进行输出时都会进行类型提升,补足为4字节的int 类型(这么说可能不严谨,反正就是提升为4字节),由于uc和us都是无符号类型,所以提升的时候前面都是补0。也就是说us在内存中的存储形式是0x0000ffff,uc在内存中是0x000000ff,而ui在内存中是0xffffffff,printf函数输出什么值是和前面的数据类型符相关的,例如上面那段程序中的printf是%d,那么编译程序就按照有符号整数来对后面的变量进行解释。
相同赋值的int和usigned int在内存中的表示是一样的,signed和unsigned只是告诉程序对内存的不同解释方式,前者按照有符号数解释(考虑符号位),后者按无符号数(不考虑符号位)解释,这一点和%d,%u的作用是一样的。
%d,%u的不同就在于对内存的解释不同,前者将内存中的数据看成有符号的,后者看成是无符号的。(将signed int使用%u输出,实质就是相当于对这块内存的重新解释)。变量的输出与变量是unsigned还是unsigned无关,而取决于%d或u%等对内存的再解释
有符号类型(char)无论向有符号类型(int)还是无符号类型(unsigned int)扩展,都会按照有符号数的扩展规则(高位补符号位)。
无符号类型(unsigned char)无论向有符号类型(int)还是无符号类型(unsigned int)扩展,都会按照无符号数的扩展规则(高位补0)。
补充一张图,确实发生了类型提升
相关文章推荐
- php免费短信
- Android******Context******
- python之LIST基础操作
- 时光飞逝
- win7_64位_VS2013_x86_opencv2411配置总结
- HTML5 localStorage 本地存储文件
- 平衡二叉查找树 AVL 的实现
- IOS学习日记(1)从伟大的hello world开始
- qrencode二维码生成在linux下的编译
- step by step 之餐饮管理系统七(点菜模块实现)
- Android实现ping功能
- maven和mybatis
- 巧虎来啦,一部很棒的儿童综艺节目,宝宝爱看哦。
- uva 1292(树形dp)
- 从json获取坐标,生成地图覆盖物
- 基础阶段总结
- 201507152326_《Javascript实现跨域有4种方法——介绍jsonp和html5方法》
- Codeforces 558D Guess Your Way Out! II (区间覆盖+扫描线)
- C语言程序设计 6章
- [leetcode] Longest Palindromic Substring 多种解法