当前位置:   article > 正文

关于int变量占用字节的理解_一个int占几个bit

一个int占几个bit

近几天在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

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号