void main()
{
unsigned short a;
int b=-1;void main()
{
unsigned short a;
int b=-1;
a=b;
cout<<a<<endl;
system("pause");
}
有事先走了,明天再写
输出出果为:65535
解答一下为什么会输出65535呢
先看一下他的取值范围,
short 在一般计算机中占 2 个字节 也就是 16 位 1byte=8bit
我们一般时候会这么用 short a;
计算机默认为有符号 所以取值范围是 -2^8 ~~~ 2^8-1 ^是幂的意思
所以也就是 -32768 ~~~ 32767
但是我们上边定义为 unsigned 为无符号 所以取值范围是 0~~~2^16-1 也就是 0~~~~65535
int b=-1;
a=b;
我们看下这两行代码
你了解了short的取值当然 int 你也了解了 int b=-1; 没有问题 因为int是有符号的 装个-1没啥问题
a=b 看这行 我们把值赋给 a 了 看了上面的取值 unsigned short 装不下
这样程序会以循环的方式查找 看到这也许你有些晕,不必急
如果我们把 b的值改成 0 a 的值也会是0 不用质疑吧 !
但是你现在写成 -1 ,a 无法存下 -1 ,所以程序 会自动向反方向查找 !
这个东西上学的时候我也不理解,现在才明白过来。微软是如何定义和执行的我们不需要考虑
我们只要让住他的规律性
记法:
- ____________________ +
我们就把它当成 x 轴
unsigned short a;
int b=-1;
a=b;
值为 65535
unsigned short a;
int b=65536;
a=b;
值 0
仔细看下区别 :无非存不下就是从头来呗 遇到 负的就向左找 遇到 正数就向右找 找到对应位数就完了
提示:理解去记忆,懂得原理就可以了
a=b;
cout<<a<<endl;
system("pause");
}
有事先走了,明天再写
输出出果为:65535
解答一下为什么会输出65535呢
先看一下他的取值范围,
short 在一般计算机中占 2 个字节 也就是 16 位 1byte=8bit
我们一般时候会这么用 short a;
计算机默认为有符号 所以取值范围是 -2^8 ~~~ 2^8-1 ^是幂的意思
所以也就是 -32768 ~~~ 32767
但是我们上边定义为 unsigned 为无符号 所以取值范围是 0~~~2^16-1 也就是 0~~~~65535
int b=-1;
a=b;
我们看下这两行代码
你了解了short的取值当然 int 你也了解了 int b=-1; 没有问题 因为int是有符号的 装个-1没啥问题
a=b 看这行 我们把值赋给 a 了 看了上面的取值 unsigned short 装不下
这样程序会以循环的方式查找 看到这也许你有些晕,不必急
如果我们把 b的值改成 0 a 的值也会是0 不用质疑吧 !
但是你现在写成 -1 ,a 无法存下 -1 ,所以程序 会自动向反方向查找 !
这个东西上学的时候我也不理解,现在才明白过来。微软是如何定义和执行的我们不需要考虑
我们只要让住他的规律性
记法:
- ____________________ +
我们就把它当成 x 轴
unsigned short a;
int b=-1;
a=b;
值为 65535
unsigned short a;
int b=65536;
a=b;
值 0
仔细看下区别 :无非存不下就是从头来呗 遇到 负的就向左找 遇到 正数就向右找 找到对应位数就完了
提示:理解去记忆,懂得原理就可以了