[补分]关于C++变量类型的相关问题jed575大神 请进
在只知道short为长度为2字节的情况下计算该类型的取值范围
2字节*8位=16位//问题1:这里的为什么要乘8呢?是不是指的是8位的操作系统?
2^16=65536//问题2:这里2的16次方 16代表着什么?16位的内存单元或是什么?
最小值为:65536/2=32768
最大值为:65532/2-1=32767//问题3:由于0也占一位,所以减去1,不知这样理解是否正确?
最后得出 short的取值范围是 -32768~32767
问题4:16位的操作系统 32位的操作系统 64位的操作系统 对变量的取值有何影响呢?为什么呢?
问题5:long类型是指long double浮点类型吗?long long类型呢?
疑问6:上面的short取值范围是-32768~32767 所以有效数字为5 是否正确?
请认真解答,帮助解惑后 会多赠送100财富值
尽量别拷贝书上的内容,现在就是在看书,看晕了。。
---------------------------------
说好解决问题后 会再赠送100分的,结果手机确认直接成功了 没提示分数
再开一贴 给予分数
jed575 请进来~ 展开
但是看上面有人回复了就再补充一下好了。。
问题1:因为1个字节的定义就是8位,表示一个字节所占宽度,就和计算机中1K=1024的定义一样
问题2:
这里的16就是问题1里面的16位,
1位能保存的数据只能是0或1,能表示2个数;
2位能保存00,01,10,11,能表示2^2=4个数;
以此类推,因为2个字节占16位,所以就能表示2^16=65536个数了
问题3:
在计算机中存储数据采用补码存储,避免0被两次定义
因为原码存储的话+0是16个0,-0是1后15个0
但是补码存储的话,由于负数会除符号位取反+1,所以-0和+0都可以用16个0来定义了
这样一来可以表示的数据范围就是:
正数:原码等于补码,都是16个0~0后15个1,即0~2^15-1,也就是0~32767
负数:原码的1后14个0后1~16个1,取补得到16个0~16个1,即0~-2^15+1,也就是0~-32767
如此一来,补码的16个1没被定义到,规定让它表示负数最小值,即-2^15,也就是-32768
(有符号数最高位是符号位这些基本知识我就不多说了,多看看计算机组成原理相关书籍)
因此short数据范围就是-32768~32767(-2^15 ~ 2^15-1)
问题4:
N位操作系统就是说CPU一次能处理N位数据,和硬件支持也有关。
这里还要说一下,其实编译器也是有位数设定的,
但是根据测试,VS下C++里如果使用x86编译器的话sizeof(int)和x64编译器下的sizeof(int)结果都是4字节;
但是sizeof(int *)分别是4和8字节,也就是说并不是N位编译器int类型是N位,而是指针类型宽度为N位。
不过int宽度确实也跟编译器有关,16位下会向指针宽度靠拢,变成2字节,但是32位往上走就不再变了。
16位下的int在32位以上就是short了。
问题5:
问题4里也说了,int类型比较特殊,会根据编译器走,所以有short, long这样定死的类型存在
short int 是有符号短整型 占2字节 和16位编译器的int一样,int可省略
unsigned short int 是无符号短整型 占2字节 和16位编译器的unsigned int一样,int可省略
long int 是有符号长整型 占4字节 和32位以上编译器的int一样,int可省略
unsigned long int 是无符号长整型 占4字节 和32位以上编译器的unsigned int一样,int可省略
float是单精度浮点型 占4字节
double是双精度浮点型 占8字节
long double的宽度和编译器有关,有的和double一样,有的可能是16字节
long long同理,和编译器有关,有的编译器可能没有定义,有的编译器把它当作__int64类型,即8字节
问题6:
请参考fang2503的回答。。
因为1个字节等于8位(和1m等于100cm一个道理)(位是计算机中的基本单位),和多少位操作系统没有关系。
16 代表问题1中的16位(把它换算成基本单位),因为电脑的算法是2进制的,所以以2为底数,16为指数进行计算取值范围。
打个比方:假设一共有两个位,那么可以表示四种数:00、01、10、11,(最高位为符号位),定义00代表整数0,01代表整数1,10代表整数-2,11代表整数-1,最大值为 4/2 - 1 = 1。因为有了一个符号位,所以计算取值范围的时候需要除以2,又因为10代表了-2(别问为什么,就是这么定的),所以自然最大值就要减1了。
操作系统对取值范围的影响最具有代表性的类型是 int 类型。它在一些操作系统中的定义为4个字节,而有的操作系统是2个字节。这个主要是看各自编译器的定义了。所以为了谨慎起见,代码在不同的编译器都可以正常工作,用sizeof(int)来获取int类型在这个系统下占了多少位字节。
long类型是long int类型,是整型,不是浮点类型,long long同理是long long int;顾名思义long表示加长的意思(即加大int类型的取值范围)。long类型一般是8个字节,都是问题4里也说了长度和操作系统有关系。
这个问的是有效数字的定义了,相信百度一下就这样知道了。 有效数字是针对某一个特定的数字的,而不是你理解的什么取值范围。没有比short整型好计算有效数字的了,看到多少位就是多少个有效数字。比如32767有效数字个数就是5 。
2 16个二进制位. 一个位 表示 一个 0或1
3 0被分到正数的范围, 0~3276 = 32768, -1 ~ -32768=32768 , 所以 32768+32768=65532
4一个shor = char*2 在16,32,64都是两个字节.但是字节却变成了8, 16 ,32
5 long 是基本类型和int一样占4个字节. long long 没有这个. 只有 long long ago.
6 shor 范围 -32768~32767, 宽度 2 (字节). 只能说, 最大值和最小值的绝对值,是5位数. 没什么特别的意义.
2014-05-31
问题2:16代表二进制1后面的16个0,就跟十进制中10的16次方一样
问题3:你的理解不完全正确,最大值相当于二进制1后面有15个零,再减去1,等于32767(跟问题2有相似性)
问题4:根据我的理解
16位操作系统的int类型是16位
32位操作系统的int类型是32位
64位操作系统的int类型是64位
问题5:long是修饰符,跟short一样,都是修饰整数的,通常的int其实指的是long int,只不过把long隐掉了
long long是不允许这样写的,long只能修饰int
问题6:这个问题没有看明白