关于C++变量类型的相关问题

拿short举例在只知道short为长度为2字节的情况下计算该类型的取值范围2字节*8位=16位//问题1:这里的为什么要乘8呢?是不是指的是8位的操作系统?2^16=6... 拿short举例
在只知道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财富值
尽量别拷贝书上的内容,现在就是在看书,看晕了。。
展开
 我来答
百度网友57a2c15d6
推荐于2016-08-08 · TA获得超过1850个赞
知道大有可为答主
回答量:2135
采纳率:0%
帮助的人:1893万
展开全部
1个字节等于8位,这个不受操作系统限制,是行业规范

因此2个字节共有16位

用2进制表示数,一个16位的2进制数最多可以表示2^16=65536个数

因为short类型是包含负数的,故采用补码方式表达负数,据此推出表达范围-32768~32767

操作系统的位数指的是在该操作系统下一个指令所占的位数,指令相关的知识在学习汇编语言的时候会讲到,这里暂且略过。理论上位数越高的系统单个变量的最大值(或者是浮点数的精度)就越大(高),但现在大多数C语言编译器都遵守C89和C99规范,变量的大小都是一样的,不受操作系统影响

long类型应该是长整型,是整数,取值范围比int大,占用的字节数也更多
long long类型是加长的长整型,也是整数,取值范围比long更大,占用字节数也更多

一般实际编程中不太用得到这两个类型

对整数(非浮点数)有效数字这个概念没有意义
追问
我现在用的是VS2013   最新的C++11标准,放在陈旧的老式机器上面,变量的大小受影响吗?其他的都懂了,但这个操作系统影响变量长度的问题还是想多多少少的了解一下。
16位的操作系统 32位的操作系统 64位的操作系统

都是如何对变量长度进行操作的?能否说明下。
追答
关于变量大小的规范在C89之后就没有再改变过,这也是为了兼容性而决定的。所有新的规范都能兼容老的标准,但反过来就不成立

通常用C语言而不用系统API编写程序时操作系统的位数对变量大小完全没有影响

使用到系统API时,通常和指针与内存地址的位数会有不同,当然这个主要和CPU的位数有关,但通常操作系统和CPU的位数是一致的。其他类型的变量不受影响

举个例子,一个简化的8位操作系统,配合一个8位CPU
要做一个分支跳转指令(类似if或者goto)
具体为BR IMM5 ->PC=PC+ IMM5
在编码的时候是一个8位的二进制数 10111001

(假设BR的指令编码是101,IMM5是11001)

如果操作系统和CPU的位数增加到16位,非指令编码的长度就会增加,可以跳转的内存地址范围就会增大

这些已经属于操作系统和硬件构架的内容了,对于编程初学者太深了,因为你比较好奇就拿出来吓唬你下,莫怪
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式