gpt4 book ai didi

c - 带符号字符的按位运算

转载 作者:太空宇宙 更新时间:2023-11-04 04:59:28 27 4
gpt4 key购买 nike

我找到了一个打印有符号字符的最大值和最小值的程序。虽然我们在类里面学习了位运算,但我不明白当所有运算符放在一起时。

 int main(void)
{
printf("Minimum Signed Char %d\n",-(char)((unsigned char) ~0 >> 1) - 1);
printf("Maximum Signed Char %d\n",(char) ((unsigned char) ~0 >> 1));
}

例如,我知道 ~ 翻转位并 >> 将它们移到右边。所以我相信 ~0 >> 1,翻转所有位并将它们移到正确的位置。但是为什么我们减1,我以为补码加一呢?

最佳答案

  • (unsigned char) ~0 的所有位都是 1(最大的正 unsigned char)
  • >> 1 关闭最高位,用于符号(largest positive signed char)
  • -(char) 将该值作为 char 取反(注意:应该是 signed char)
  • - 1 用于现在的负值,因为在二进制补码中,最负值比最正值大 1(因为零值的符号位关闭,并且二进制补码中没有“负零”)

关于c - 带符号字符的按位运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39681675/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com