赞
踩
近几天在C++中常常使用int这个类型的变量,可是这个int变量占用几个字节是怎么来的呢?怎么理解呢?
写一篇博客来记录一下心得。
在32位系统中为例,int类型占用4个字节
首先,这个不可不提字节的转换了,即:
1Byte(字节) = 8bit(比特)
int类型占用4个Byte,也即是占用了32个bit位
传统的ASCII编码是用0~255来表示各个可印刷字符和非可印刷字符的,只占用一个字节,但是随着Unicode编码和utf编码的出现,汉字这些等等具有复杂数量的字符,255个数字表示的二进制数显然不够。
所以后来占用的字节越来越大(这里的字节指的是机器总长,指的是最理想的状态下占用的字节数)
32个bit位,无符号数在此不做讨论。
此处做一个先后说明:
是先有二进制的表示才有2的31次方-1这种十进制的表示,不是用二进制表示十进制,是用十进制表示二进制,不要搞错了!
比如最高的4字节正数二进制为:
0111 1111 1111 1111 1111 1111 1111 1111
但是表示成十进制是2147483647,这一点要理清先后关系!!!
对于有符号数而言,0为正,1为负
在32位中第一位是符号位不必多言。
1的原码为0000 0000 0000 0000 0000 0000 0000 0001
2147483647的原码为:
0111 1111 1111 1111 1111 1111 1111 1111
因此对于正数而言,第一位必然是0(限定死了),所以最大只能表示成2的31次方-1
但是,负数可不是这么表示的。
负数在计算机中表示为补码
-2147483647为最小有效负数
原码为1111 1111 1111 1111 1111 1111 1111 1111
反码为1000 0000 0000 0000 0000 0000 0000 0000
补码为:1000 0000 0000 0000 0000 0000 0000 0001
对于0的表示,正常情况下有+0和-0两种
+0的原码为0000 0000 0000 0000 0000 0000 0000 0000,
-0的原码为1000 0000 0000 0000 0000 0000 0000 0000,
因为0只需要一个,所以把-0拿来当做一个最小数-2147483648。
所以-2147483648表示为
1000 0000 0000 0000 0000 0000 0000 0000
注意,这个补码并不是真正的补码,真正的补码是
1 1000 0000 0000 0000 0000 0000 0000 0000,会溢出。
所以最小数表示成-2的31次方
所以占4个字节的int变量取值范围为-231~231-1
二进制通常情况下是用8个bit表示的不错,可是现在很少用8bit来表示了,8bit的1个字节只能表示传统的ASCII编码上的内容,很少用了,只是在平时讲解的用的比较多一点,正常情况下该写32位还是得写成32位!不够的用0进行补位!
sleep
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。