关于int型变量按字节输出问题

shellnut6 2019-05-05 08:45:53
当 i 赋值127和128时,输出结果不一样是怎么回事?如下代码及输出结果,i=128时输出是ffffff80, i=127时输出为7f

#include<iostream>
using namespace std;

int main()
{

int i = 128;
cout << sizeof(int) << endl;

char* cc = (char*)&i;

cout << sizeof(*cc) << endl;

for (int j = 0; j < 4; j++)
printf("cc: %p \t *cc: %x\n", cc + j, *(cc + j));

system("pause");
return 0;
}


#include<iostream>
using namespace std;

int main()
{

int i = 128;
cout << sizeof(int) << endl;

char* cc = (char*)&i;

cout << sizeof(*cc) << endl;

for (int j = 0; j < 4; j++)
printf("cc: %p \t *cc: %x\n", cc + j, *(cc + j));

system("pause");
return 0;
}
...全文
164 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2019-05-06
  • 打赏
  • 举报
回复
int main() { int i = 128; cout << sizeof(int) << endl; char* cc = (char*)&i; cout << sizeof(*cc) << endl; for (int j = 0; j < 4; j++) printf("cc: %p \t *cc: %02x\n", cc + j, (unsigned char)(*(cc + j))); system("pause"); return 0; }
棉猴 2019-05-06
  • 打赏
  • 举报
回复
对于char类型的变量,对其赋值为0x80,相当于将其设置为-128。
printf()函数的参数%x其含义为
Unsigned hexadecimal integer;
即输出一个十六进制的整型,而在代码中,%x对应的是char类型,所以此时printf()函数会将char类型隐式转换为int类型。
对于int类型的对象,其值为-128,则其对应的内存值是0xFFFFFF80。
而将char类型的变量,对其赋值为0x7F,在printf()函数隐式转换时,int类型的值是0x0000007F,输出时前面的0x00不输出。
对于有符号与无符号类型的相关知识,请参数《C++中有符号整数的取值范围》
希望能够帮到你!
sdghchj 2019-05-06
  • 打赏
  • 举报
回复
char是有符号字符类型,128以上就溢出为负数,unsigned char的128~255就是char-128~-1,char按%x输出时又会将char隐式转为int,负数是以其补码存储的,高位全补1,就出现了很多f.
shellnut6 2019-05-05
  • 打赏
  • 举报
回复
引用 1 楼 smwhotjay 的回复:
感觉是char 128就溢出了。用unsigned char试试。
谢谢,使用unsigned char之后就可以了。 有个问题,我用i = 11259375,十六进制0xABCDEF,用char会出现我说的那种现象,用unsigned char就不会出现,这是为什么?谢谢
smwhotjay 2019-05-05
  • 打赏
  • 举报
回复
unsigned char 范围0-255 貌似
smwhotjay 2019-05-05
  • 打赏
  • 举报
回复
感觉是char 128就溢出了。用unsigned char试试。

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧