首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将负数二进制数转换为格雷码

如何将负数二进制数转换为格雷码
EN

Stack Overflow用户
提问于 2014-11-21 09:06:04
回答 2查看 1.4K关注 0票数 4

我有一个负二进制数,它有一个符号位,我想写一个程序来得到它的格雷码。然而,我只能找到正数的解决方案。所以我在这里问这个问题。谢谢。

EN

回答 2

Stack Overflow用户

发布于 2014-11-22 21:05:51

只能计算非负数的格雷码,方法如下:

代码语言:javascript
复制
int gray_encode(int n) {
    return n ^ (n >> 1);
}

同样的方法不适用于负数,因为二进制数的补码表示。

票数 0
EN

Stack Overflow用户

发布于 2021-06-22 22:10:42

如果目标位宽已知,则可以将带符号整数转换为格雷码:

代码语言:javascript
复制
int gray_encode(int n) {
    return n ^ (n >> 1);
}

int gray_encode_signed(int n, int width_bits) {
    int all_ones = (1 << width_bits) - 1;
    return (n >= 0 ? gray_encode(n) : gray_encode(abs(n)) + all_ones);
}

例如,这是从-7到7的值的4位格雷码:

代码语言:javascript
复制
decimal   4bit gray code
     -7    1011
     -6    1100
     -5    1110
     -4    1101
     -3    1001
     -2    1010
     -1    1000
      0    0000
      1    0001
      2    0011
      3    0010
      4    0110
      5    0111
      6    0101
      7    0100
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27052532

复制
相关文章

相似问题

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