小编wha*_*cko的帖子

C/C++中的字符大小('a')

C和C++中的字符大小是多少?据我所知,char的大小在C和C++中都是1个字节.

在C:

#include <stdio.h>
int main()
{
    printf("Size of char : %d\n", sizeof(char));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在C++中:

#include <iostream>
int main()
{
    std::cout << "Size of char : " << sizeof(char) << "\n";
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

没有惊喜,它们都给出了输出: Size of char : 1

现在我们知道,字符表示为'a','b','c','|',...所以我只是修改了上面的代码对这些:

在C:

#include <stdio.h>
int main()
{
    char a = 'a';
    printf("Size of char : %d\n", sizeof(a));
    printf("Size of char : %d\n", sizeof('a'));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

Size of char …
Run Code Online (Sandbox Code Playgroud)

c c++ types

287
推荐指数
4
解决办法
27万
查看次数

关于C - union中的union作为一种类型并且读作另一种类型的问题 - 是否已实现定义?

我正在阅读K&R中关于C的联合,据我所知,联合中的单个变量可以包含几种类型中的任何一种,如果某些东西存储为一种类型并且提取为另一种,则结果纯粹是实现定义的.

现在请检查以下代码段:

#include<stdio.h>

int main(void)
{
  union a
  {
     int i;
     char ch[2];
  };

  union a u;
  u.ch[0] = 3;
  u.ch[1] = 2;

  printf("%d %d %d\n", u.ch[0], u.ch[1], u.i);

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

3 2 515
Run Code Online (Sandbox Code Playgroud)

在这里,我在分配值u.ch,但来自检索u.chu.i.它是实现定义的吗?或者我做的事情真的很傻?

我知道这对其他大多数人来说似乎都是初学者,但我无法弄清楚输出背后的原因.

谢谢.

c undefined undefined-behavior unions

29
推荐指数
5
解决办法
8598
查看次数

排序整数的数字

给你一个整数51234(比方说)我们需要对输出数字的数字进行排序12345.

不使用数组怎么做?

c c++

11
推荐指数
3
解决办法
9433
查看次数

第n个Fibonacci数的调用次数

请考虑以下代码段:

int fib(int N)
{
   if(N<2) return 1;
   return (fib(N-1) + fib(N-2));
}
Run Code Online (Sandbox Code Playgroud)

鉴于fib从主要调用N为10,35,67,...(比如说),总共拨打了多少电话fib

这个问题有什么关系吗?

PS:这是一个理论问题,不应该被执行.

编辑:

我知道其他方法可以更快地计算Fibonacci系列.

我想要一个解决方案来计算fib被调用为fib(40),fib(50),...而没有编译器的帮助,并且在考试条件下你应该回答40个类似于这个规定的问题时间(约30分钟).

谢谢,

c c++ algorithm

8
推荐指数
1
解决办法
1万
查看次数

每个if-else构造都可以用等效的条件表达式替换吗?

(我不太需要这个答案,我只是好奇.)

是否可以使用条件运算符将每个if-else构造替换为等效的条件表达式?:

c c++ conditional-operator

8
推荐指数
1
解决办法
4591
查看次数

项目EULER#29

好吧,在通过天真​​的STL集解决了这个问题后,我正在阅读论坛条目,在那里我找到了这个条目:

 #include <iostream>   
 #include <cmath> 
 #define MAX 100
 using namespace std;

 int main(){
    int res=(MAX-1)*(MAX-1);
    for(int i=2;i<MAX;i++)
        for(int j=i*i;j<=MAX;j=j*i)
            res = res-int(MAX*(log(i)/log(j)))+1;
     cout<<res<<endl;
     return 0;
  }
Run Code Online (Sandbox Code Playgroud)

作者的解释: Maximum will be 99*99. I subtracted occurrences of those numbers which are powers of some lower numbers (2-100): - For example: - 4^2,4^3,4^4 (i.e. 3 should be subtracted) as they will be duplicates from lower number powers as in 2^4,2^6,2^8

这个程序在这里给出了正确的答案检查,但是我无法得到实现的逻辑,确切地说,我没有得到重复项的确定方式.有人可以帮忙吗?

c++ algorithm math

8
推荐指数
1
解决办法
3671
查看次数

整数的二进制表示中的零个数

可能重复:
计算32位整数中设置位数的最佳算法?

给定32位整数N,设计算法以找到N的二进制位表示中的零的数量.

我能想到的最简单的算法是检查零的二进制表示,在C中是这样的:

int num_of_zero(int num)
 {
   if(0 == num) return 1; /*For the input 0 it should output 1 */
   int Count = 0;
   while(num>0){
     if(0 == (num&1)) Count++;
    num >>= 1;
}
return Count;
}
Run Code Online (Sandbox Code Playgroud)

如果有一些算法在恒定时间计算,我就会徘徊.

对于输入0,它应该返回1 而不是32.

对于5,输出应为1.二进制表示为101.

对于7,输出应为0.

确切地说,我正在寻找一种更好的算法来计算32位整数的二进制解释中的(非前导)零的数量.希望问题现在很明显.

编辑:正如Alex Martelli指出的那样,我正在修改我的代码以使其更具可读性并且这次使用迭代.

c algorithm

7
推荐指数
2
解决办法
2万
查看次数

这个基地有多少位数?

问题是导出一个公式,用于确定给定十进制数在给定基数中可能具有的位数.

例如:十进制数100006可分别由基数2,3,4,5,6,7,8中的17,11,9,8,7,6,8位数表示.

那么我到目前为止得到的公式是这样的:(log10(num)/ log10(base))+ 1.

在C/C++中,我使用这个公式来计算上面给出的结果.

long long int size = ((double)log10(num) / (double)log10(base)) + 1.0;

但遗憾的是,在某些情况下,公式并没有给出正确的答案,例如:

Number 8 in  base 2 : 1,0,0,0
Number of digits: 4
Formula returned: 3

Number 64 in  base 2 : 1,0,0,0,0,0,0
Number of digits: 7
Formula returned: 6

Number 64 in  base 4 : 1,0,0,0
Number of digits: 4
Formula returned: 3

Number 125 in  base 5 : 1,0,0,0
Number of digits: 4
Formula returned: 3

Number 128 in  base 2 : …
Run Code Online (Sandbox Code Playgroud)

c c++ algorithm math formula

7
推荐指数
3
解决办法
3026
查看次数

C中long double的转换说明符

长双数据类型可以在C这些转换说明:%乐,%LE,%LF,%了Lg,%LG(参考).

我写了一个小程序来测试:

#include <stdio.h>
int main(void) {
  long double d = 656546.67894L;
  printf("%.0Le\n",d);
  printf("%.0LE\n",d);
  printf("%.0Lf\n",d);
  printf("%.0Lg\n",d);
  printf("%.0LG\n",d);
  return 0; 
}
Run Code Online (Sandbox Code Playgroud)

输出:

-0

-4E-153

-0

-4E-153

-4E-153

但没有人能提供所需的输出,即656547(你可能很容易理解).是什么原因?

使用的编译器是gcc版本3.4.2(mingw-special).

c mingw

4
推荐指数
1
解决办法
3808
查看次数

这是"*ptr ++ =*ptr + a"未定义的行为吗?

好吧,我真的不是真的需要这个答案,我只是好奇.

类似*ptr++ = a的表达式是完全有效的,因为我们操作两个对象ptr,*ptr但如果我写*ptr++ = *ptr + a它仍然有效?

例如,请考虑以下代码段:

int main(void){
   int a[] = {5,7,8,9,2};

   int* p =a;

   *p++ = 76; /*altering the first element */
   *p++ = *p + 32; /*altering the second element */    

   p = a;
   int i;
   for(i = 0;i<5; i++)
      printf("%d ",*p++);

   return 0;
}
Run Code Online (Sandbox Code Playgroud)

我认为表达没有什么可担心的,*p++ = *p + 32;但我不确定所涉及的序列点.

c c++ sequence-points

4
推荐指数
2
解决办法
804
查看次数