在其中一次采访中。一个人问我想在字符数据类型中存储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;
是否可以在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的所有人员提供快速结果并给出合理的答案。
答案 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.这与存储值不同。