从一段小小的C语言程序说起(2)
来源:互联网 发布:mysql查看表 编辑:程序博客网 时间:2024/05/19 04:04
还是先贴出程序:
那么,这里有个问题是:printf 用%d格式输出不是打印整形的值么 那不就是要打印从s[2]开始的四个字节么?
或者是另有其它原因呢?
可能有人会说,应该写成:
这里不作为讨论的重点,其实是将四个整数赋给字符数组的四个元素s[0]s[1]s[2]s[3],因为char型,也是int型的一种,相当于__int8。8位的int,所以当然可以这样赋值,只要所赋的值不超过char的范围就不会溢出,故这个问题就不说了。
回到正题:
其实这是一个类型转换的问题
printf("%d/n", s[2]);
跟printf("%d/n", (int)s[2]);
一样的效果,只是第一个由编译器自动转换了,第二个由你提醒编译器要进行强制转换
那么一个char型转换成int型,就是把一个字节的数据扩展成四个字节,高三个字节按照char型数据的符号位进行扩充,如果char的高位是0,那么高三个字节就扩充成0,如果是1就扩充成1。
来个实际的数据就明白了
char a = 1;
他的二进制表示就是0000 0001
转换成(int)a
扩充到int也就是32位0000 0000 0000 0000 0000 0000 0000 0001
注:如果这时没有将其赋给某个数的话,这个值是临时存在的,实际上的a并没有改变
char a=-1;
他的二进制表示就是1111 1111,
转换成(int)a
扩充到int也就是32位1111 1111 1111 1111 1111 1111 1111 1111
对于为啥不是打印接下来的四个字节的数据,是因为这个扩充不是从内存中去读取接下来四个字节的内存数据,而是把一个字节的数据扩展成四个字节
----------------------------------------------------------------------------------------------
后面准备多找点这样的程序,写写自己认为对的解释,当然我认为对的不一定就是对的,还希望高人指正!!
- 从一段小小的C语言程序说起(2)
- 从一段小小的C语言程序说起(1)
- 从一段小小的C语言程序说起(3)
- 从一段c程序的优化说起
- 从C语言的enum说起
- 一段小小的插曲
- 24位图转RGB565的一段C语言小程序
- 关于C语言冒泡排序的一段小程序。
- 一段解析字符串中单词的C语言小程序
- 从一个Python程序的性能说起
- 从枚举的初始化说起 [C#]
- [原]Java字符串的内存分配--从C语言字符串操作说起
- 一段有趣的C程序
- 【C++】【学习笔记】【002-003】从一个小程序说起
- 【C++】【学习笔记】【004】从另一个小程序说起
- 工作的一段小小总结
- 我的小小成果 C语言
- 小小君的C语言第一课
- 无题 2010-11-11
- IIS 注册framework
- Android下个人整理的一些工具方法
- 查看Linux版本信息(网络文摘)
- 冒泡排序
- 从一段小小的C语言程序说起(2)
- 记录数组数据到日志的两种方法
- free命令
- vim编辑器使用(网摘)
- VirtualBox 及一些特殊USB(无驱动)的识别问题(二)解决了不能识别一些特殊USB的问题(其实就是插着USB重启,很简单)
- CACHE 的组织方式
- Oracle小技巧 - 改变Oracle10g EM显示的语言
- 图片翻转180,镜像的简单实现方法
- Android图片放大修改代码