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

C 如何在字符数据类型中存储999值,c,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 [-

在一次采访中。有人问我想在字符数据类型中存储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]
storeintinchar.c:6:1: warning: large integer implicitly truncated to unsigned type [-Woverflow]
当我运行它时:

a=999. c=-25;
当我将
字符
更改为
无符号字符c=999时

当我编译程序时,我得到如下警告:

storeintinchar.c:6:1: warning: overflow in implicit constant conversion [-Woverflow]
storeintinchar.c:6:1: warning: large integer implicitly truncated to unsigned type [-Woverflow]
当我运行它时

a=999。c=231

  • 我们可以用字符存储999值吗?我们可以用任何方式存储吗

  • 面试官想测试什么

  • 是否可以在wchar\t中存储999值。当我搜索上面的问题时,我在GNUC库中发现wchar\u 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\u t是4个字节。我能在里面存储999个值


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

    你不能。
    char
    数据类型(在您可能遇到的每个平台上)有8位,因此最多可以编码256个值。假设您需要的所有值都达到999,这超出了它的编码能力。当
    char
    被签名时,它只存储-128到+127之间的值

    但是,如果您只需要对999及以下的一些值进行编码,则可以使用查找表


    或者,您可以使用(例如)2
    char
    值,将其夹在一起形成一个16位整数,它最多可以存储65535个无符号数字。

    如果编译器的字节大小合适,理论上可以将999存储在一个字节中。检查
    limits.h
    以了解当前
    char
    类型的大小。但当然,对于每一个体系结构和每一个编译器,您不能期望这样大小的
    char
    。通常对于现代体系结构来说,一个字符是8位的,如果不使用任何额外的内存,你就不能在那里存储这么大的数字。

    你可以存储999(以及其他一些数字),但是你需要实现一种算法,可以“压缩”数字,结果是,字符的位并不是它们通常的意思,而是掌握着解决方案的关键。。。算法如下所示:

    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 ....
          ....
    

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


    还要注意,
    char
    可以表示任何值。例如,可以说值1表示999,然后只存储1。这与能够存储一个值不同。

    简短且唯一的答案是:你不能。
    char
    通常是一个字节,8位,不能存储超出该范围的值。但是你可以使用位运算将它存储在两个
    char
    变量中。实际上,你已经在你的问题中回答了你自己的问题。面试官可能想测试你的基本计算技能。你不能在字符中存储999,但你可以在wchar中存储。正如迈克尔所说,这是对计算机常识的测试。如果面试官说“字符数据类型”,他可能是指3个字符吗?也就是说,转换为ASCII?现在还不清楚到底问了什么。不要接受这份工作,如果一个潜在的雇主问了一些愚蠢的问题,我会拒绝他们的邀请,因为他们已经证明了他们的无能。是的,查找表是一个可能的解决方案,但我想他想把这个值存储在字符中,如问题中所述