请问一个C语言int的的问题。

我听一个老师说1的的二进制0000 0001(8位);而我知道1应该是整形int。那么应该有4字节才对(32CPU),也就是32位,所以我混乱了。谁能解析下!我哪里混乱了,我在研究补码,这些不懂,好像挺关键的。
再有int a = 1;的话a应该有4字节是吧,那他的地址(我这边的)0013FF7C这又是怎么回事?这个是16进制。是8位,1字节!搞不懂,int定义的变量4字节的,存地址一字节?可能我定义理解不好,请谁能帮我分辨下这些!

你们老师说1那只是个常量,没说是int型的1,char、short、int等等都可以是1的类型。

在32位CPU上,int是4字节32位没错,着一点你理解是正确的。
int a=1;a有4字节,它的地址其实也是个四字节的整型,0013ff7c是4个字节,不是1个字节,16进制的两位譬如0x7c已经可以表达1字节的8位信息,你把16进制转成2进制,0x7c就是8个0和1组成的数了,那么a的地址有四个这样的两位16进制组成,那就是4字节,32位二进制了。追问

他是讲补码时,说1的 2进制的00000001的所以是个整形常量!不是字符,所以我就混乱了!就算是短整型也要2字节啊。这边才一字节!请帮我梳理一下!谢谢

追答

char、short、int、long和long long都属于整型,只是为了区分,说整型一般都指int,其他的用别的名称来称呼,严格来说你老师说得没错。

追问

可他为什么是一字节啊

追答

老师应该是用最简单的情况来说明,char就是1字节的,8个bite,用它来说明比特位操作比用32位的int型容易多了,方便教学,不然你看一堆的0和1,数都数半天。

追问

也就是说,我的理解还是对的,其实这边的1是4个字节(32bit)。只是为了简单所以写了一个字节。其实是00000000 00000000 00000000 00000001才是1.补码的换算也是通过这个来算才是具体的。。。

追答

是的。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-05-13
老师把前面的0省略写了呗。int占用4字节这是要特殊说明的,比如我们说int占几个字节,那么需要再问你运行在几位的cpu上,老师的例子是在8位机上的例子。关键需要高清当前使用的cpu位宽再研究补码问题。
地址是int数据的4字节起始地址。
第2个回答  2013-05-13
32位系统里,存地址用32位二进制数。而一位16进制数对应4位二进制数,所以地址表示成十六进制数共有:32/4=8位16进制数,如你提到的0013FF7C。
int变量占四字节(Byte)。一个字节是8位二进制数。int a=1;这个变量a的值在内存中占四个字节。
第3个回答  2013-05-13
一位16进制数 就是4bit
8个16进制数 就是32位了呗
相似回答