Tag: int

将int转换为C中的float(无转换)

如何将int转换为float(返回为unsigned,但解释为float)? 我不能使用任何高级语言结构,如联合,只有按位操作,控制逻辑(if / while),+和 – 等。

将整数存储为浮点数

假设我有一个API,只允许我存储浮点数或浮点数组。 但是,我想在这里存储整数值。 我(大致)明白,我很好,直接投到2 ^ 23左右,但是如果我想要更高的话呢? 有没有什么方法可以利用浮动的32位更多,并确保我会得到相同的数字? 为了澄清: 我正在使用Pixar的PRMan(即RenderMan)对点云做一些操作。 我可以用C或C ++编写链接来预编译点云API。 PRMan绝不必使用我存储的这些内容; 在操作附加到点上的其他数据后,我只需要将它们完整地交还给我。

为什么“long int”与“int”具有相同的大小? 这个修饰符是否有效?

嗯..我很喜欢这样的修饰符,如长 / 短扩展/减少创建变量时分配的内存量,但是…… #include #define test_int int #define long_int long int #define long_long_int long long int void main() { printf(“%i\n”, sizeof (test_int)); //output 4 printf(“%i\n”, sizeof (long_int)); //output 4. Why? wasn’t I modified it’s size? printf(“%i\n”, sizeof (long_long_int)); //output 8 } 由于未知原因,它将int和long int的大小打印为相同。 我使用的是vc ++ 2010 express版。 对不起,很难在谷歌找到答案,它总是显示长和int作为单独的类型。

C / C ++使用int或unsigned int

在很多代码示例,源代码,库等中我看到使用int时,就我所知,unsigned int会更有意义。 我看到的一个地方很多是for循环。 见下面的例子: for(int i = 0; i < length; i++) { // Do Stuff } 为什么你会使用int而不是unsigned int? 这只是懒惰吗 – 人们不会因打字unsigned而烦恼吗?

将int转换为float时在后台会发生什么

我对于如何逐步将int转换为浮动有一些不了解? 假设我有一个二进制格式的带符号整数。 而且,我想把它用手漂浮。 但是,我不能。 因此,CAn一个人告诉我如何逐步进行转换? 我在c中进行多次转换? 喜欢; int a = foo ( ); float f = ( float ) a ; 但是,我还没弄清楚背景会发生什么。 而且,为了更好地理解,我想手工完成转换。 编辑:如果您对转换了解很多,您还可以提供有关浮动到双转换的信息。 而且,对于float到int

64位计算机上int和sizeof int指针的大小

我只是想知道我怎么知道我的笔记本电脑是64位还是32位机器。 (这是64)。 所以,我考虑过打印以下内容: int main() { printf(“%d”,sizeof(int)); } 结果是4,这看起来很奇怪(因为它是64位机器) 但是,当我打印这个: int main() { printf(“%d”,sizeof(int*)); } 结果是8,这更有意义。 问题是: 由于我使用的是64位机器,因此int等基本类型不应该使用8个字节 (64位),那个sizeof int应该是8? 为什么不是这样? 为什么int *大小是8? 这里有点困惑, 所以,提前谢谢。

如何在C中为整数类型变量赋值?

在C中, … int num = ‘a’; … 我的问题很简单。 如何在整数类型变量中指定诸如“0”,“a”,“b”之类的字符而不会在C语言中出现任何类型错误?

在C中通过套接字传输整数

在C中通过套接字传递int的适当方法是什么? 到目前为止我所做的是: int n = 4; int tmp = htonl(n); write(socket, &tmp, sizeof(tmp)); 和 int tmp,n; read(socket, &tmp, sizeof(tmp)); n = ntohl(tmp); 但是,收到的整数有时为0.并非总是如此,但我要说5次中的2次。 它永远不会是其他价值,总是为什么?为什么? 更新:读取的返回值为-1,错误为: Resource temporarily unavailable

在C中,为什么不能将整数值赋给int *,就像将字符串值赋给char *一样?

我一直在浏览网站,但尚未找到答案。 用一个例子来解释这个问题是最容易的(至少对我来说)。 我不明白为什么这是有效的: #include int main(int argc, char* argv[]) { char *mystr = “hello”; } 但是这会产生一个编译器警告(“初始化使整数从没有强制转换的整数中生成”): #include int main(int argc, char* argv[]) { int *myint = 5; } 我对第一个程序的理解是创建一个名为mystr的变量,类型为pointer-to-char,其值是字符串文字“hello”的第一个字符(’h’)的地址。 换句话说,使用此初始化,您不仅可以获取指针,还可以定义指针指向的对象(在本例中为“hello”)。 那么,为什么int *myint = 5; 看似没有实现与此类似的东西,即创建一个名为myint的变量类型指针指向int,其值是值’5’的地址? 为什么这个初始化既不给我指针也定义指针所指向的对象?

将int转换为指针 – 为什么要先转换为long? (如在p =(void *)42;)

在GLib文档中,有一章关于类型转换宏。 在关于将int转换为*void指针的讨论中,它说(强调我的): 天真的,你可以试试这个,但这是不正确的: gpointer p; int i; p = (void*) 42; i = (int) p; 同样,该示例不正确,请勿复制。 问题是在某些系统上你需要这样做: gpointer p; int i; p = (void*) (long) 42; i = (int) (long) p; (来源:GLib参考手册GLib 2.39.92,章节类型转换宏 )。 为什么long必要? 是否任何需要扩展的int不会自动作为指针转换的一部分发生?