我想将char类型转换为int类型,而不丢失有符号的含义,所以我在文件int_test中编写代码。c和它的工作原理:
#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>
#define c2int(x) \
({ \
int t; \
if (x > 0x80) \
t = x | (1 << sizeof(int) * 8) - (1 << sizeof(char) * 8); \
else \
t = x; \
t; \
})
int main()
{
uint8_t a = 0xFE;
int b;
b = c2int(a);
printf("(signed char)a = %hhi, b = %d\n", a, b);
exit(EXIT_SUCCESS);
}
运行结果是:
(有符号字符)a=-2,b=-2
编译日志是:
gcc-o int _ test int _ test . c int _ test . c:在函数“main”中:int_test.c:9:15:警告:左移位计数
我的问题是:1.是否有简单有效的转换?2.简单地将char转换为int时,如何确定有符号扩展?3.如何避免上述警告?
谢谢你。
>
有没有简单高效的转换?
// To convert a value to char and then to int
// As a function or macro
#define c2int(x) ((int)(char)(x))
int c2int(char x) { return x; }
// To convert a value to signed char and then to int
#define c2int(x) ((int)(signed char)(x))
int c2int(signed char x) { return x; }
简单地把char转换成int时,如何确定有符号展开?
不需要特殊代码,见上文。c为你做这个。
如何避免上述警告?
确保移位小于位宽。< br >避免移入符号位。
是否要扩展签名?如果你想要签名扩展,你必须先通过一个签名的字符
。如果不是,则只需使用赋值或初始化的隐式转换:
unsigned char x = 0xfe;
int y = (signed char) x;
int z = x;
printf("x = %hhx, y = %08x, z = %08x\n", x, y, z);
上面的代码应该打印
x = fe, y = fffffffe, z = 000000fe
您正在进行手动、显式的符号转换。不要这样做。相反:
static int c2int(unsigned char x)
{
return (signed char)x;
}
这确实为您签署了扩展,并且不会产生警告。
问题内容: 我引用了Herbert Schildt的第3章:数据类型,变量和数组: 字符的范围是0到65535。没有负字符。标准字符集ASCII(通常称为ASCII)的范围始终为0到127,而扩展的8位字符集ISO- Latin-1的范围为0到255。由于Java旨在允许程序在全球范围内编写使用时,将使用Unicode表示字符是有意义的。只要整数在范围内,也可以将整数分配给char。 (which
当运行此代码时,我得到以下错误:
我想说得具体一点。我有一个名为Result的类和一个名为Result的派生类 这些类在方法中用作返回类型。为此,我创建了这个helper类: 正如您所看到的,上面的代码对于成功有两种返回类型,一种是如果您不想返回任何东西,另一种是如果您想返回一些东西,但是失败的结果永远不会返回什么东西。这是不必要的,只是一个错误消息。这使我想到以下问题:当我想创建一个可以使用返回类型返回Success,而不使用返
问题内容: 我正在获取ASCII值,并且想将其转换为整数,因为我知道它是整数ASCII值。 这是5的ASCII值。我如何将其转换为整数? 问题答案:
我是新到Java,我需要一个程序,接受4个整数输入,4个双输入,和3个字符输入。我准备好了整数和双倍输入。我真的需要帮助得到字符输入,请帮助。 我一直得到这个错误: 不兼容类型:char无法转换为char[]charValue=input.charat(0); 这是我的代码:
问题内容: 将a转换为a 的最直接和/或最有效的方法是什么? 问题答案: 没有副本: 但是,该方法可能更容易编写,更容易阅读和更快。