【发布时间】:2021-09-17 21:07:49
【问题描述】:
我是 C 的初学者。
这段代码做了 SCHAR_MIN 所做的事情:
#include<stdio.h>
int main(void)
{
printf("Minimum Signed Char %d\n",-(char)((unsigned char) ~0 >> 1) - 1);
return 0;
}
这是我的理解:
(unsigned char) 采用无符号字符的位,即“0000 0000”。
~0 给出了它的补码,即“1111 1111”,>> 1 将“1111 1111”左侧的“1”变为 0,因此它将给出“0111 1111”。将“0111 1111”转换为整数将得到 127,这是最大的有符号字符。为了得到最小值,我们需要反转 127,所以我们将它乘以 - 得到 -127,- 1 得到 -128,这是最小值。如果我误解了什么,请告诉我。
问题:
(char)在这里的作用是什么?就在((unsigned char) ~0 >> 1) 之前?它代表什么?
【问题讨论】:
-
(char)的作用是将右表达式的结果转换为char。这是一个演员表。顺便说一句,不要认为char总是8位! -
@fpiette 为什么我们要将结果转换为字符?如果我删除它,它会工作得很好。它有什么区别?是为了让bit size变小吗?
-
删除
- 1,然后尝试使用和不使用(char) -
@Eraklon:结果是一样的。
-
@Eraklon 没有明显的改变...