关于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财富值
尽量别拷贝书上的内容,现在就是在看书,看晕了。。 展开
在只知道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财富值
尽量别拷贝书上的内容,现在就是在看书,看晕了。。 展开
1个回答
展开全部
1个字节等于8位,这个不受操作系统限制,是行业规范
因此2个字节共有16位
用2进制表示数,一个16位的2进制数最多可以表示2^16=65536个数
因为short类型是包含负数的,故采用补码方式表达负数,据此推出表达范围-32768~32767
操作系统的位数指的是在该操作系统下一个指令所占的位数,指令相关的知识在学习汇编语言的时候会讲到,这里暂且略过。理论上位数越高的系统单个变量的最大值(或者是浮点数的精度)就越大(高),但现在大多数C语言编译器都遵守C89和C99规范,变量的大小都是一样的,不受操作系统影响
long类型应该是长整型,是整数,取值范围比int大,占用的字节数也更多
long long类型是加长的长整型,也是整数,取值范围比long更大,占用字节数也更多
一般实际编程中不太用得到这两个类型
对整数(非浮点数)有效数字这个概念没有意义
因此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位,非指令编码的长度就会增加,可以跳转的内存地址范围就会增大
这些已经属于操作系统和硬件构架的内容了,对于编程初学者太深了,因为你比较好奇就拿出来吓唬你下,莫怪
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询