如何在字符数据类型中存储999值

时间:2014-03-13 08:14:31

标签: c

在其中一次采访中。一个人问我想在字符数据类型中存储999值。如何做。

999 = 1111100111(二进制表示)

字符是1字节的类型。 8位。

int main()
{
int a =999;
signed char c = 999;
printf("%d %d",a,c);
}

当我编译程序时,我收到警告

storeintinchar.c:6:1: warning: overflow in implicit constant conversion [-Woverflow]

我跑的时候:

a=999. c=-25;

当我将character更改为unsigned char c=999;

当我编译程序时,我收到警告

storeintinchar.c:6:1: warning: large integer implicitly truncated to unsigned type [-Woverflow]

我跑的时候。

a=999. c=231;

  1. 我们可以以任何方式存储999值的字符。
  2. 面试官试图测试什么?
  3. 是否可以在wchar_t中存储999值。当我在上面搜索上面的问题时,我发现在GNU C库中,wchar_t总是32位宽。然后我们可以使用它。它有效吗

    int main()  {  int a = 999;  unsigned char c = 999;  wchar_t d = 999;  printf(“%d%d%d”,a,c,d);

    }

    输出:999 231 999

    wchar_t是4个字节。我能够存储999的值。

    我感谢stackoverflow的所有人员提供快速结果并给出合理的答案。

4 个答案:

答案 0 :(得分:1)

如果编译器具有正确的字节大小,理论上可以在一个字节中存储999。检查limits.h您当前char类型的尺寸。但是当然,对于每个架构和每个编译器,你都不能期望char的大小。通常对于现代架构,一个字符是8位,如果没有使用任何额外的内存,你就不能存储这么大的数字。

答案 1 :(得分:1)

你可以存储999(以及其他一些数字),但是你需要实现一种算法,它可以压缩"压缩"这个数字,结果是char的位不代表它们通常的含义,而是持有解决方案的关键......算法就像:

bit idx:      7 6 5 4 3 2 1 0
bit value:    0 0 0 0 0 1 1 1

所以,为了这个999你做:

999 = bit[0] * 9 * (10 ^ 0) +    // 1 * 9 + 
      bit[1] * 9 * (10 ^ 1) +    // 1 * 90 + 
      bit[2] * 9 * (10 ^ 2) +    // 1 * 900
      bit[3] * 9 * (10 ^ 3) +    // 0 * 9000 ....
      ....

答案 2 :(得分:0)

你做不到。 char数据类型(在您可能遇到的每个平台上)都有8位,因此最多可以编码256个值。假设您需要 all 最多999的值,那就超出了它的编码范围。由于char已签名,因此它仅存储-128到+127之间的值。

然而,如果您只需要编码某些值至999的值,您可以使用查找表。

或者,你可以使用(例如)2个char值,夹在一起制作一个16位整数,这可以存储最多65535的无符号数。

答案 3 :(得分:0)

要将值999存储在char数据中,您需要将其分解并将其存储在2个或更多char个中。例如(使用每个char的7位):

char first = 999 % 128
char second = 999 / 128

另请注意,char 可能代表任何值。例如,您可以说值1代表999,然后只存储1.这与存储值不同。