小编byr*_*sj1的帖子

C:使用printf()进行数据类型和转换

我对编程很新,我开始习惯C.如果这是一个重复的问题,我道歉(我不知道底层的过程,即搜索什么).

我正在使用一个简单的程序来熟悉数据类型的细微差别:

main(){
    int i;
    float a,b;


    i = 2;
    a = 2.0;
    b = 4.0;

    printf("%d %1.1f", i/b,a/b);
}
Run Code Online (Sandbox Code Playgroud)

我希望程序打印0 0.5(因为a和b都是浮点数,我将它们的比率打印为浮点数),但程序打印0 0.0(我正在使用gcc -o).但是,当我反转printf顺序(不切换相应变量的顺序)时,即:

printf("%1.1f %d", i/b,a/b);
Run Code Online (Sandbox Code Playgroud)

打印结果是0.5 0.我不确定这里发生了什么.似乎在第一个程序中,b在i/b中被转换为int,并且无法在a/b中转换为float.但是,在第二个变体中,b在打印出两种不同类型时没有任何问题.不能强制进入浮点数吗?有人可以解释这个或指出我正确的方向吗?

谢谢!

c

2
推荐指数
1
解决办法
772
查看次数

sys/kernel/debug/krpobes/列表为空

我正在尝试附加到 kprobe 事件以用于工具,但我对 kprobe 事件不太熟悉。我读到注册的 kprobes 列表可用,/sys/kernel/debug/kprobes/listsudo less /sys/kernel/debug/krpobes/list显示没有注册的 kprobes。我已确认 krpobes/enabled 为 1。我是否做错了什么?

trace kernel kprobe

2
推荐指数
1
解决办法
1778
查看次数

整数类型无法按预期工作(Java)

我正在编写我的第一个在Java中处理泛型和标准OOP原则的程序,但是在处理Integer类型时我遇到了一些问题.

我注意到整数应该有一个名为compareTo(Integer anotherInteger)的方法,以便像你整理那样比较它们.

但是,当我尝试在我的程序中实现此方法时,我遇到了一个问题.

错误找不到符号符号:方法compareTo(整数)位置:类型为Integer的变量x其中Integer是一个类型变量:整数扩展在BinarySearchTree中声明的Object

本质上,我有x.comporeTo(y),其中x和y的类型为Integer,但找不到类型为Integer(x)的变量的compareTo方法.不知道如何解决这个问题,任何帮助将不胜感激.

谢谢

编辑:我在下面提供了一个小例子来突出我的问题.我相信我正在影响Integer,但我不知道如何绕过这样做,或者如何解决问题,

    public class IntgS<Integer>
    {
            Intg<Integer> z = new Intg(3);
            Intg<Integer> y = new Intg(2);
            int w = (z.getX()).compareTo(y.getX());

            public class Intg<Integer>
            {
                    private Integer x;
                    public Intg(Integer x)
                    {
                            this.x = x;
                    }

                    public Integer getX()
                    {
                            return x;
                    }
            }
    }
Run Code Online (Sandbox Code Playgroud)

这给出了相同的错误,表示Integer类型变量z.getX()没有方法.compareTo(Integer).

java generics integer

0
推荐指数
1
解决办法
447
查看次数

reinterpret_cast&lt;const unsigned char*&gt; 的语义

我偶然发现了以下代码:

#include <bitset>
#include <iostream>

int main() {
  int x = 8;
  void *w = &x;
  bool val = *reinterpret_cast<const unsigned char*>(&x);
  bool *z = static_cast<bool *>(w);
  std::cout << "z (" << z << ") is " << *z << ": " << std::bitset<8>(*z) << "\n";
  std::cout << "val is " << val << ": " << std::bitset<8>(val) << "\n";
}
Run Code Online (Sandbox Code Playgroud)

使用 -O3,会产生输出:

z (0x7ffcaef0dba4) is 8: 00001000
val is 1: 00000001
Run Code Online (Sandbox Code Playgroud)

然而,使用 -O0 时,会产生输出:

z (0x7ffe8c6c914c) is 0: 00000000 …
Run Code Online (Sandbox Code Playgroud)

c++ reinterpret-cast

0
推荐指数
1
解决办法
201
查看次数

标签 统计

c ×1

c++ ×1

generics ×1

integer ×1

java ×1

kernel ×1

kprobe ×1

reinterpret-cast ×1

trace ×1