请帮忙看一下,一个输出
时间:2010-08-18
来源:互联网
- unsigned int a=0xfffffff7;
- unsigned char i=(unsigned char)a;
- char *b=(char *)&a;
- printf("%08x,%08x",i,*b);
0000007f fffffff7
第一个输出可以理解,就是把溢出的位去掉,其余的直接装到 i 中
第二个想不清楚,b已经指向整个整数,*b的话应该只输出,整数中的一个字节啊,怎么会输出fffffff7呢?
谢谢
环境 x86,fedora,gcc
作者: xdshting 发布时间: 2010-08-18
作者: efolzl 发布时间: 2010-08-18
作者: davelv 发布时间: 2010-08-18
efolzl 发表于 2010-08-18 11:17
%08x我试过了,是16进制,无符号打印
而且,如果直接给他f7的话,它打印的就是000000f7啊
作者: xdshting 发布时间: 2010-08-18
davelv 发表于 2010-08-18 11:20
按整形大小输出应该补0才是啊,总不能补 f 吧
作者: xdshting 发布时间: 2010-08-18
作者: davelv 发布时间: 2010-08-18
改成
unsigned char *b=(char *)&a;
就可以了。
作者: hellioncu 发布时间: 2010-08-18
是不是这一句你本想用
unsigned char *b=(char *)&a;
这应该是你要的结果
作者: zliming 发布时间: 2010-08-18
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28