小编car*_*995的帖子

C++ union表示数据内存与C标量变量类型

今天我有一个奇怪的问题.

代码(C++)

#include <iostream>

union name
{
    int num;
    float num2;

}oblong;


int main(void)
{
    oblong.num2 = 27.881;

    std::cout << oblong.num << std::endl;

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

守则(C)

#include <stdio.h>

int main(void)
{
    float num = 27.881;

    printf("%d\n" , num);

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

问题

  1. 众所周知,C++联合可以包含多种类型的数据元素,但一次只能包含一种类型.所以基本上name oblong只会保留一部分32位的内存(因为联合中最大的类型是32位,int和float),这部分可以保存整数或浮点数.

  2. 所以我只需要将值27.881分配给oblong.num2(如上面的代码所示).但出于好奇,我访问使用oblong.num指向相同内存位置的内存.

  3. 正如预期的那样,它给了我一个不是27的值,因为浮点数和整数在内存中表示的方式是不同的,这就是为什么当我oblong.num用来访问内存部分时它会把那部分内存值当作整数来解释它整数表示方式.

  4. 我知道这种现象也会在C中发生,这就是为什么我用一个值初始化一个浮点型变量然后用%d.So 读取它.我只是尝试使用27.881你在上面看到的相同值.但是当我运行它时,会发生一些奇怪的事情,那就是我在C中获得的值与C++不同.

  5. 为什么会这样?据我所知,我从两个代码到底得到的两个值不是垃圾值,但为什么我得到不同的值?我还使用sizeof来验证C和C++整数和浮点大小,两者都是32位.因此,内存大小不会导致这种情况发生,那么是什么促使这些值的差异?

c c++ floating-point integer unions

6
推荐指数
1
解决办法
502
查看次数

Changed_when 不工作,如果任务结果失败

为什么我无法使用来更改返回changed_when的任务的状态?failedchanged

例如,我有一个自定义模块,允许我检查卷是否存在,如果卷不存在,它将失败。

剧本片段:

---
- name: Example ansible playbook
  tasks:
    - name: Check existence of the volume
      custom_name_space_my_volume:
        name: ABC #name of the volume
      changed_when: true
Run Code Online (Sandbox Code Playgroud)

如果该卷ABC不存在,则结果为failed。但为什么没有change_when: true导致结果返回changed呢?

注意:上面的例子可能没有逻辑意义,因为它没有做一些有用的事情。但我只是想用它作为我的问题的样本。

ansible

6
推荐指数
1
解决办法
4002
查看次数

通过C类型促销从简短到整数拼图

我有一个问题需要任何专家的指导:

  1. 由于带有short类型的值作为参数传递给printf()函数,它将自动提升为int类型,这就是printf()函数将值视为int类型而不是short类型的原因.

  2. 所以基本上short类型是16位宽,也就是0000000000000000同时int的类型是32位宽,这是00000000000000000000000000000000.

  3. 假设我声明了一个numshort类型的变量调用,并用值-32初始化它,这意味着该short类型的最高位将是1,即0000000011100000.

  4. 当我将此值传递给printf()它时,它将被转换为int类型,因此它将成为00000000000000000000000011100000.

  5. 在步骤4中,当它被转换为时int,最高有效位是0.

  6. 为什么,当我使用说明%hd符甚至是%d说明符时,它仍会提示我输入负值而不是正值?

c int types short

5
推荐指数
2
解决办法
667
查看次数

Windows命令提示符中的伪造环境

实际上我正在考虑为我的编程任务创建一个很酷的界面,所以我到处搜索如何做到这样可以创建这样的效果,下面是图像.

在此输入图像描述

问题

1.)为了创建一个运行伪像(semigraphic或其他任何名称)的程序需要什么,它具有像BIOS向导这样的菜单?我总是看到一些程序在控制台中运行,但它可能具有类似于图形的外观,示例蓝色环境,用户可以使用键盘选择菜单中的设置列表.

感谢您花时间阅读我的问题.

c++ console winapi command-line

5
推荐指数
1
解决办法
492
查看次数

混淆while和for循环的变量范围(C编程)

今天在编写代码时,我遇到了一些我不希望以这种方式发生的事情.Below只是问题的一个示例代码.

守则1

while(true)
{
 int i = 1;

 printf("This is %d\n" , i);
 ++i;
 if(i == 10)
   break;
}
Run Code Online (Sandbox Code Playgroud)

守则2

for(int i = 1 ; ; i++)
{
 printf("This is %d\n" , i);
 if(i == 10)
    break;
}
Run Code Online (Sandbox Code Playgroud)

问题:

1.)第一个代码会导致无限循环,而后者则不会.

2.)我不明白,有一个标准的提及变量声明在内部,而循环可以通过while循环内的任何语句访问,但为什么if()不能访问变量i的值,而后者可以??

感谢您花时间阅读我的问题

c variables scope for-loop while-loop

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

表达式中的多个后缀增量运算符[C++]

可能重复:
任何人都可以解释这些未定义的行为(i = i ++ + ++ i,i = i ++等...)

我现在正在上讲课,我的讲师提到了如下表达方式:

int a , b;
a = 4;
b = a++ + a--;
Run Code Online (Sandbox Code Playgroud)

问题

我的讲师说这个表达式值可以定义:它是8.这意味着值4被求和并在它递增和递减之前分配给b.

但对我来说,我认为这个表达式答案有点模糊,结果将基于编译器实现.这是因为对我来说,编译器可能首先执行a ++部分 - 也就是说,使用值4并将a增加到5,之后表达式为4 + 5 = 9并且分配给b然后只减少a.

它也可能首先使用值4来执行a - 部分并将其递减1到3,然后将值4与3相加并将值赋值给b然后仅将a递增回4.

我的问题是谁是正确的,我的讲师还是我?因为我不想与它混淆,后来对我来说将是一个问题.

c++

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

静态绑定和Array的动态绑定之间的区别

我刚刚阅读了关于我现在在stackoverflow中询问的相同主题的所有搜索结果,并没有真正回答我的好奇心.但这就是事情.

问题

1.)据我所知,静态绑定意味着它在编译期间设置,并且它在运行时存在,而动态绑定意味着它在运行时设置.

2.)所以我读过的书介绍了动态数组,它提到动态数组大小可以在运行时设置.这是以这种方式完成的.

代码

int size;
cin >> size;
int * pz = new int [size]; // dynamic binding, size set at run time
delete [] pz; // free memory when finished
Run Code Online (Sandbox Code Playgroud)


3.)在这段代码中,书中提到动态数组大小可以在运行期间设置.出于好奇,我试试这个.

代码

int size;
cin >> size;
int array[size];
//After the array declaraction i assign value to it to check whether it works or not.
Run Code Online (Sandbox Code Playgroud)


4.)上面的代码也有效,所以我只是好奇动态数组有什么特别之处,因为普通静态数组可以做同样的工作.

5.)是因为动态数组可以在运行时释放它的内存而静态不能使它如此特殊吗?


感谢您花时间阅读我的问题,请指出我所犯的任何错误.

c++ arrays dynamic-binding static-binding

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

用颜色填充整个&lt;header&gt;背景

<html>
<head>
<style>
header
{
    background-color:#ECF3F3;
}
</style>
</head>
<body>
<header>
    <h1>Food Hunt</h1>
    <!-- <a href="login.php">login</a>
    <a href="signup.php">sign up</a>
    <form>
        <input type="text">
    </form>
    -->

</header>
<nav>
</nav>
<aside>
</aside>
<footer>
</footer>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

问题:

1.)我试图<header>用背景颜色填充整个区域,但是问题是,当我尝试查看页面时,而不是<header>用颜色填充整个区域,在页面的顶部,左侧和右侧都有白色边框<header>。我可以知道背景颜色不能<header>完全填满整个空间的原因吗?

html css html5 css3

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

CSS定位和CSS边距之间的区别

今天我在CSS中学习了2个概念,一个是CSS定位(静态,相对,绝对,固定),另一个是CSS Margin,它定义了元素之间的空间.

假设我想移动一个元素,这是最好的方法吗?因为这两个概念似乎都可以做同样的事情.一个例子可能如下:

代码(CSS定位):

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Haha</title>

        <style type="text/css">
            //Using CSS positioning
            h2{position:relative;top:-80px}
        </style>
    </head>

    <body>
        <h1>hahahaha</h1>
        <h2>hehehehe</h2>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

守则(CSS保证金):

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Haha</title>

        <style type="text/css">
            //Using CSS Margin
            h2{margin-top:-80px}
        </style>
    </head>

    <body>
        <h1>hahahaha</h1>
        <h2>hehehehe</h2>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

问题:

1.)正如你所看到的,通过将第二个标题移动到第一个标题的顶部,上面的2个代码做了同样的事情.所以我只是想知道哪种方法实际上是排列元素的正确方法?

css margin css-position

3
推荐指数
1
解决办法
2718
查看次数

函数调用执行速度比非函数调用快

函数调用总会产生一些开销.但为什么下面的代码显示非函数调用较慢.

码:

import time

def s():
    for i in range(1000000000):
        1 + 1

t = time.time()
s()
print("Function call: " + str(time.time() - t))

t = time.time()
for i in range(1000000000):
    1 + 1
print("Non function call: " + str(time.time() - t))
Run Code Online (Sandbox Code Playgroud)

输出:

Function call: 38.39736223220825
Non function call: 60.33238506317139
Run Code Online (Sandbox Code Playgroud)

python function python-3.x python-internals

3
推荐指数
1
解决办法
139
查看次数