C 从有符号 char 类型转换为 int 类型

标签 c char signed

在下面的代码片段中,输出不应该是1吗?为什么我得到的输出为 -1 和 4294967295? 我的理解是,这里的变量c是有符号类型的,所以它的值不应该是1吗?

char c=0xff;
printf("%d %u",c,c);

最佳答案

c 是有符号类型。一个字符是8位。因此,您有一个 8 位有符号量,所有位均为 1。在二进制补码机器上,其计算结果为 -1。

当您执行此类操作时,某些编译器会警告您。如果您使用 gcc/clang,请打开所有警告。

学究注释:在某些机器上,如果编译器将“char”视为无符号,则其值可能为 255。

关于C 从有符号 char 类型转换为 int 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42701823/

相关文章:

将 libc 回溯转换为源代码行号

C++:警告:有符号和无符号表达式(Gmake、freebsd)

c - 将字符串插入二叉搜索树 C

有人能帮我理解我教授发布的这段代码吗?

内存中的 C++ 对象

c++ - char* 到 const wchar_t * 转换

c++ - 对于有保证的单个字符,使用 `char` 还是 `string` 更好?

python 将负整数转换为字节(singed=True),但转换回来,它变成正数

assembly - 最小的有符号 16 位十进制数是

CodeChef 上的切割食谱练习