我对编程很新,我开始习惯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在打印出两种不同类型时没有任何问题.不能强制进入浮点数吗?有人可以解释这个或指出我正确的方向吗?
谢谢!
我正在尝试附加到 kprobe 事件以用于工具,但我对 kprobe 事件不太熟悉。我读到注册的 kprobes 列表可用,/sys/kernel/debug/kprobes/list但sudo less /sys/kernel/debug/krpobes/list显示没有注册的 kprobes。我已确认 krpobes/enabled 为 1。我是否做错了什么?
我正在编写我的第一个在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).
我偶然发现了以下代码:
#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)