unsigned short 和 int 赋值问题

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

仔细看下区别 :无非存不下就是从头来呗 遇到 负的就向左找 遇到 正数就向右找 找到对应位数就完了

提示:理解去记忆,懂得原理就可以了

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值