首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何解决我的位移位C代码中的以下错误?

如何解决我的位移位C代码中的以下错误?
EN

Stack Overflow用户
提问于 2021-12-03 20:52:26
回答 2查看 173关注 0票数 2

有没有人能帮我解决下面的问题?假设我有二进制值int colour,它是255或即

代码语言:javascript
复制
00000000 00000000 000000000 11111111

以二进制表示。如何执行移位操作才能获得

代码语言:javascript
复制
11111111 11111111 11111111 00000000

我尝试对0xff0xff000xff00000xff000000做4个值,并准备对它们进行OR运算,但是当我打印出这些值时,我得到了以下错误:

代码语言:javascript
复制
converter.c:66:23: runtime error: left shift of 255 by 24 places cannot be represented in type 'int'
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior converter.c:66:23 

in 
VALS ARE ff,  ff00, ff0000, ff000000

下面是我的代码,如果有任何帮助,我们将不胜感激

代码语言:javascript
复制
  int val1 = colour;
  int val2 = (colour << 8);
  int val3 = (colour << 16);
  int val4 = (colour << 24);
  //unsigned int val5 = 0;
  printf("VALS ARE %x,  %x, %x, %x\n" , val1, val2, val3, val4);
  //rowElement(colour, sketch);
EN

回答 2

Stack Overflow用户

发布于 2021-12-03 20:59:12

写一篇就足够了

代码语言:javascript
复制
int x = 255;
x ~= x;

或者,最好将变量x声明为unsigned int类型。

代码语言:javascript
复制
unsigned int x = 255;
x ~= x;

至于移位运算符,则根据C标准(6.5.7按位移位运算符)

4 E1 << E2的结果是E1左移位E2位位置;空出的位用零填充。如果E1有一个无符号类型,则结果的值是E1×2E2,比结果类型中可以表示的最大值多减一个模。如果E1具有带符号的类型和非负值,并且E1×2E2在结果类型中可表示,则这是结果值;否则,行为未定义。

票数 0
EN

Stack Overflow用户

发布于 2021-12-04 01:24:00

要反转ARGB颜色或任何32位无符号整数中的字节,请向右移位,然后使用0xff,例如,要从0x11223344获取44,我们只需使用0x11223344 & 0xff来获取33,向右移位8位-> 0x00112233,然后再次使用0xff

需要左移才能再次构建32位整数。

代码语言:javascript
复制
int main(void)
{
    unsigned int colour = 0x11223344;

    unsigned char byte0, byte1, byte2, byte3;
    byte0 = (colour      ) & 0xff;
    byte1 = (colour >> 8 ) & 0xff;
    byte2 = (colour >> 16) & 0xff;
    byte3 = (colour >> 24) & 0xff;

    unsigned int reversed = byte0 << 24 | byte1 << 16 | byte2 << 8 | byte3;

    printf("%08X\n", colour);
    printf("%08X\n", reversed);

    return 0;
}

输出

代码语言:javascript
复制
11223344
44332211
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70220553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档