(弱弱问一下)整型常数(比如数字1)编译后在内存中是无符号整型还是有符号整型?

image_trans 2007-12-09 11:08:19
rt

还是数字常数在内存中不分配空间?
...全文
144 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzyjsjcom 2007-12-10
  • 打赏
  • 举报
回复
int main()
{
char A = 0xFF;
char *a = &A;
unsigned char *b = &A;
printf("char:%d\tunsigned char:%d", *a, *b);
}

----------显然 0xFF没有分配空间
A分配了空间,编译器直接把oxFF放到与A相关连的 内存中
chlaws 2007-12-09
  • 打赏
  • 举报
回复

肯定是有符号的
int 1;
假设在TC中编译 2个字节 (偷个懒少写16位)
内存形式是:
0000 0000 0000 0001
最高位0代表正数
若是1则表示负数

Treazy 2007-12-09
  • 打赏
  • 举报
回复
>>整型常数(比如数字1)编译后在内存中是无符号整型还是有符号整型

内存中存在的数据,自身永远不知道这个数据是什么类型的
只有当一个变量和这块内存区域相关联的时候,这个时候就以变量的类型作内存的解释

举个很简单的例子
在内存0x40000h处
其单元值为0xFF

若现在用一个char型变量去以%d输出,那输出就是-1
若现在用一个unsigned char 型变量去以%d输出,那输出就是255

代码实现如下

int main()
{
char A = 0xFF;
char *a = &A;
unsigned char *b = &A;
printf("char:%d\tunsigned char:%d", *a, *b);
}

image_trans 2007-12-09
  • 打赏
  • 举报
回复
楼上的, 能否给一个实例加以说明,感激不尽!
simaping 2007-12-09
  • 打赏
  • 举报
回复
有符号整型
thecorr 2007-12-09
  • 打赏
  • 举报
回复
顶戒指。。。
image_trans 2007-12-09
  • 打赏
  • 举报
回复
哦,有点搞懂Treazy的分析了,谢谢!!!
image_trans 2007-12-09
  • 打赏
  • 举报
回复
zzyjsjcom,说不分配空间。

大多数人却说有分配空间,这其中又分为有int型和unsigned int型。

我到底信谁的呢,哪位来给个确定的答案吧!
yclz 2007-12-09
  • 打赏
  • 举报
回复
认成什么应该与编译器有关,VC下
#include <iostream>
using namespace std;

int main()
{
cout<<0xffffffff<<endl;
return 0;
}

认为是无符号数,为了安全期间,显示指定为好,从可移植性来说也要好。
zzyjsjcom 2007-12-09
  • 打赏
  • 举报
回复
数字常数在内存中不分配空间
在语法分析的时候挂在树上, 汇编代码生成的时候“可能“ 作为指令的操作树 所以不会分配空间
chlaws 2007-12-09
  • 打赏
  • 举报
回复
脸红下,都往机器数上面想去了.
jixingzhong 2007-12-09
  • 打赏
  • 举报
回复
看到过一种说法是 unsigned int
ltc_mouse 2007-12-09
  • 打赏
  • 举报
回复
觉得Treazy说的是对的。
chlaws,可以看下这两个数在内存中有啥区别:

int i=-1;
unsigned int j=0xFFFF;

69,364

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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