【问题标题】:What does this code means printf("Minimum Signed Char %d\n",-(char)((unsigned char) ~0 >> 1) - 1); [duplicate]这段代码是什么意思 printf("Minimum Signed Char %d\n",-(char)((unsigned char) ~0 >> 1) - 1); [复制]
【发布时间】:2021-09-25 21:40:20
【问题描述】:

谁能解释一下这行代码是什么意思

-(char)((unsigned char) ~0 >> 1) - 1);

我不知道作者为什么在 char 前面使用“-”,最后使用 -1。我知道 ~0 会将所有位变为 1,然后右移会将其移位一次,以便前面出现零。

【问题讨论】:

  • 一元 - 否定。
  • 当你写-3时,-是什么意思?
  • 那是可怕的代码。通过查看CHAR_MINstd::numeric_limits<char>::min() 来获得最小char 值要简单得多。
  • @PeteBecker:它来自CHAR_MINSCHAR_MIN 的定义。问题是探索为什么<limits.h> 以它的方式定义值。如果您阅读标记为原始的问题及其答案,您会发现它不是可怕的代码,并且各种组件在定义常量时很有用。 (事实证明,char 情况下不需要char 演员表,但在一般情况下需要它,例如long。)
  • @EricPostpischil -- CHAR_MIN 的定义是“char 类型对象的最小值”。该代码很可能来自CHAR_MIN 的某些标准库实现,但这并不是好的代码。标准库附带一个编译器,因此它可以依赖于与该特定编译器一起工作的各种非便携式黑客。大多数用户应该忽略标准库如何实现的细节。

标签: c++ c char bit-manipulation


【解决方案1】:

它只是否定(char)((unsigned char) ~0 >> 1) - 1)

你可以看到区别live

【讨论】:

  • 顺便说一句,外部二进制补码是谎言。
  • 好吧,最后的 -1 与 2 的恭维有关,因为我们在 2 的恭维中负数比正数多一个。
猜你喜欢
  • 1970-01-01
  • 2021-09-17
  • 1970-01-01
  • 2012-09-27
  • 2016-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多