Tag: 整数

使用C在二进制表示中打印int

我正在寻找一个允许我打印int的二进制表示的函数。 到目前为止我所拥有的是什么; char *int2bin(int a) { char *str,*tmp; int cnt = 31; str = (char *) malloc(33); /*32 + 1 , because its a 32 bit bin number*/ tmp = str; while ( cnt > -1 ){ str[cnt]= ‘0’; cnt –; } cnt = 31; while (a > 0){ if (a%2==1){ str[cnt] = ‘1’; } […]

如何在内存中存储任意大的整数值?

我必须存储一个大于long数据类型的最大值的整数值。 我如何在内存中存储和操作此值? 如果可能的话,请通过一个例子来说明。

整数转换(缩小,扩展),未定义的行为

我很难以我能够轻易理解的方式找到关于这个主题的信息,所以我要求对我发现的内容进行审查。这只是转换和转换的全部内容。 在示例中,我将指的是: (signed/unsigned) int bigger; (signed/unsigned) char smaller; 截断整数。 (超大化>小) 首先在MSB端截断 bigger以匹配smaller尺寸。 第二,根据较小的类型将截断的结果转换为有符号/无符号 。 如果较大的值太大而不适合较小的类型,则会导致不确定的行为(纠正我)。 但是我的规则应该是在所有机器上工作(对此也是正确的),结果应该是可预测的。 加宽整数(小 – >更大) a) signed char – > signed int 使用MSB(1或0)前置较小以匹配较大的大小 转换为签名 b) signed char – > unsigned int 使用MSB(1或0)前置较小以匹配较大的大小。 转换为无符号 c) unsigned char – > signed int 以0为前缀以匹配更大的尺寸 转换为签名 d) unsigned char – > unsigned int 以0为前缀以匹配更大的尺寸 转换为无符号 […]

有没有办法在编译时计算整数类型的宽度?

以char / bytes为单位的整数类型(或任何类型)的大小很容易计算为sizeof(type) 。 常见的习惯用法是乘以CHAR_BIT以找到该类型占用的位数,但是在使用填充位的实现中,这将不等于值位的宽度 。 更糟糕的是,代码如下: x>>CHAR_BIT*sizeof(type)-1 如果CHAR_BIT*sizeof(type)大于CHAR_BIT*sizeof(type)的实际宽度,则实际上可能具有未定义的行为。 为简单起见,我们假设我们的类型是无符号的。 那么type的宽度是ceil(log2((type)-1) 。有没有办法将这个值计算为常量表达式?