C语言中的位运算

C语言中的位运算,c,bit-manipulation,C,Bit Manipulation,我是位运算新手。我有AND、OR、XOR和2s补码的基本概念。然而,我遇到了下面的一段代码,无法理解输出 char c1 = 0xFF; // -1 int shifted = c1 << 8; //-256 (-1 * 256) printf("%d, %x\n", shifted, shifted); int myInt; myInt = 0xFFFFFFE2; printf("%d\n", myInt); int i = 0xff; printf("%d\n", i<

我是位运算新手。我有AND、OR、XOR和2s补码的基本概念。然而,我遇到了下面的一段代码,无法理解输出

char c1 = 0xFF; // -1
int shifted = c1 << 8; //-256 (-1 * 256)
printf("%d, %x\n", shifted, shifted);

int myInt;
myInt = 0xFFFFFFE2;
printf("%d\n", myInt);

int i = 0xff;
printf("%d\n", i<<2);
char c1=0xFF;//-1.
int=c1
正如所料。二的补码中-256的位模式是
0xFFFFFF00
(32位
int
s)

2的补码中的位模式是-30

printf("%d\n",myInt);

int i = 0xff ;
这是255,255*4=1020

printf("%d\n", i<<2);

  -30
  1020
printf(“%d\n”,i
正如预期的那样。2的补码中-256的位模式是
0xffff00
(32位
int
s)

2的补码中的位模式是-30

printf("%d\n",myInt);

int i = 0xff ;
这是255,255*4=1020

printf("%d\n", i<<2);

  -30
  1020

printf(“%d\n”,i用声明的位数写下二进制中的c1、myInt和i

将这些操作应用于它们


按顺序执行。

用声明的位数以二进制形式写下c1、myInt和i

将这些操作应用于它们


请仔细阅读。

好的,让我详细解释一下发生了什么。任何需要澄清的二进制表示法都将以0b作为前缀,并在左侧添加最重要的位

char c1 = 0xFF; // -1
字符c1是一种八位有符号整数类型,设置为
0b11111111
对于int、short和char等有符号类型,最左边的位用作符号位。在存储有符号类型的最常用标准中,所有位均设置为-1的任何有符号整数

int shifted = c1 << 8; //-256 (-1 * 256)
你正在读一个有符号整数,它是根据2的补码打印出来的

printf( "%d, %x\n", shifted, shifted );

int myInt;
myInt = 0xFFFFFFE2;
printf("%d\n",myInt);
int i = 0xff ;
printf("%d\n", i<<2);
inti=0xff;

printf(“%d\n”,i好,让我详细解释一下发生了什么。任何要澄清的二进制表示法都将以0b作为前缀,并在左边加上最高有效位

char c1 = 0xFF; // -1
字符c1是一种八位有符号整数类型,设置为
0b11111111
对于int、short和char等有符号类型,最左边的位用作符号位。在存储有符号类型的最常用标准中,所有位均设置为-1的任何有符号整数

int shifted = c1 << 8; //-256 (-1 * 256)
你正在读一个有符号整数,它是根据2的补码打印出来的

printf( "%d, %x\n", shifted, shifted );

int myInt;
myInt = 0xFFFFFFE2;
printf("%d\n",myInt);
int i = 0xff ;
printf("%d\n", i<<2);
inti=0xff;

printf(“%d\n”),我读了一遍。这是我读过的最好的位操作概述。不过请务必阅读答案底部的注释,因为它是为java编写的,并非所有内容都是相同的。您的计算机上有符号字符(和32位整数).通读。这是我读过的最好的位操作概述。尽管一定要阅读答案底部的注释,因为它是为java编写的,并非所有内容都是一样的。你的机器上有符号字符(和32位整数)。我相信OP不理解什么是位移位。所以“应用操作”没有多大帮助。如果值是用二进制写的,位移位很容易被英语水平合理的人扣除。当然,我承认这可能是个问题,但除了英语、西班牙语和德语,我在任何语言中都帮不上忙(我的德语太差了,我只能在德国以外的地方尝试:).我相信OP不理解什么是位移位。所以“应用操作”没有多大帮助。如果值是用二进制写的,位移位很容易被英语水平合理的人扣除。当然,我承认这可能是一个问题,但除了英语、西班牙语和德语之外,我在任何语言中都帮不上忙,(我的德语太差了,我只在德国以外的地方尝试:)。