C位移短整型

为什么结果

include <stdio.h> int main() { unsigned short int i = 0xff ; unsigned short int j; j= i<<2; printf("%xn%x\n", i, j); return 0; }

为j = 3FC?

如果两个i和j是短整型 - 因此它们是2字节的值,所以不应该Ĵ= FC ??

THX提前说明。 〜

--------------解决方案-------------

不,0x3FC中是正确的。 请注意,一个字节是两个十六进制数字,所以(16位)的简称共拥有4个十六进制数字。

移0xFF的左两位看起来是这样的:

0000 0000 1111 1111
0 0 FF

0000 0011 1111 1100 - 左移2位。
0 3 FC

所以放在0x00FF << 2 = 0x03fc。 一切看起来理所应当的。

0xff << 2 == 0xff * 4 == 0x3fc == 1020

即使他们是2个字节,他们被允许持有这个小值。

3FC只需要12位来存储,因此它可以被存储在2个字节。

C ++不保证为字节在数unsigned short int 。 它实际上使得几乎不保证任何类型以外的尺寸char被保证是1个字节。

在这种情况下,虽然这是无关紧要的,因为3FC可以成功地存储在只有2个字节。

也许这是你居然试着写什么呢? (记住一个十六进制数是4位只,即半个字节)

#include <stdio.h>
int main()
{
unsigned short int i = 0xffff;
unsigned short int j;
j = i<<8;
printf("%x %x\n", i, j);
return 0;
}

这种输出ffff ff00

分类:C# 时间:2015-03-15 人气:0
本文关键词: C#,字节
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.188 (s). 10 q(s)