读书人

望c++ primer几点类型求解

发布时间: 2013-09-15 19:58:13 作者: rapoo

看c++ primer几点类型求解
书中是这样说的

编译器必须调整越界值使其满足条件,编译器会将改值对unsigned类型的可能取值求模,然胡求其所值,比如8位的unsigned char 取值从0到255如果赋值超出这个范围,那么编译器会取改值对256求模,实际是336-256=80,也就是80


实在没明白这里,我按照理解,书写一下代码

#include<iostream>
using namespace std;
int main(){
unsigned char i="336";
cout<<i<<endl;

}
输出结果为p,这是怎么回事,求指点啊。

还有下面的一段求解释

如果在某机器上 short 类型占 16 位,那么可以赋给
short 类型的最大数是什么?unsigned short 类型的最
大数又是什么?

当给 16 位的 unsigned short 对象赋值 100 000 时,
赋的值是什么?

真心不懂 原来搞php 现在学c++一头雾水,谢谢大家指点。。。
[解决办法]

引用:
Quote: 引用:

输出结果为p,这是怎么回事,求指点啊。
----------------------------------------
P的ascii码就是80
unsigned char i = 80; // i就是字符P
要输出数字80,把i强制转变成int输出
cout << (int)i << endl;

unsigned short 最大的值 0xFFFF 65535
short 最大的值 0x7FFF 32767

当给 16 位的 unsigned short 对象赋值 100 000 时,
赋的值是什么?
100000 % 65536 我就懒得算了。

首先感谢您这么晚回答问题
unsigned char p 的ascii吗是80这个明白了,但是
unsigned short 最大的值 0xFFFF 65535
short 最大的值 0x7FFF 32767
这是怎么算的 还有 100000 % 65536 这里的 % 是相减吗 因为在php中这个是相除求模的,不胜感激

你要是 0xFFFF都不怎么明白的话,我在帖子里面也说不清啊,书上也有几页吧。
去搜索16进制和十进制的转换,二进制和16进制的转换吧。

100000 % 65536 就是取模。
[解决办法]
short算16位的话,那么对于unsigned short最大就是1111 1111 1111 1111(16位应该懂的吧),十六进制就是0xFFFF
对于有符号的就是0111 111 111 111,最高位是符号位,正数最大就是这个了,十六进制就是0x7FFF

100000 % 65536就是取膜,可以简单认为是取余数。比如100000 % 65536 = 100000 - 65536=34464
200000 % 65536 = 100000 - 3*65536=3392

读书人网 >C++

热点推荐