我只是在尝试抽象类,结果遇到了一个错误。
我有一个这样的类:
public abstract class C {
String aname;
int aid;
public C(String s, int n) {
aname = s;
aid = n;
}
public static void main(String[] args) {
System.out.println("Hello");
}
}
现在,另一个类对它进行了如下扩展:
public class D exten
我一直在使用Enterprise Architect工具执行一个与逆向工程相关的项目。但是,当我用C/C++语言执行逆向工程时,出现了未知的错误。错误日志如下:
There was an error parsing C:\Users\soo\Desktop\7z920\7zip\Archive\7z\7zDecode.cpp on line 91. Unexpected symbol: *
You may need to define a language macro.
There was an error parsing C:\Users\soo\Desktop\7z920
tl;dr在进行整数提升(类型比int短)时,比特操作是否安全,行为是否符合预期?
例如:
uint8_t a, b, c;
a = b & ~c;
这是我拥有的一个粗略的MCVE:
struct X { // this is actually templated
using U = unsigned; // U is actually a dependent name and can change
U value;
};
template <bool B> auto foo(X x1, X x2) -> X
{
if (B)
return {
如何在C中做负数的逻辑右移?基本上,我是在寻找java中>>>的C等价物
即
int one = -16711936 ;
//int two = -16711936 ;
//int three = -1;
int r, g, b;
System.out.println(Integer.toBinaryString(one));
r = one << 8;
r >>>= 24;
g = one << 16;
给定程序:
enum E : int
{
A, B, C
};
g++ -c test.cpp运行得很好。但是,clang++ -c test.cpp会显示以下错误:
test.cpp:1:6: error: ISO C++ forbids forward references to 'enum' types
enum E : int
^
test.cpp:1:8: error: expected unqualified-id
enum E : int
^
2 errors generated.
这些错误消息对我来说没有任何意义。我在这里没有看到
我有个问题。我的节目里有台词:
sprintf(buff,"Nieznany znak: %d",(char)va_arg(x, const char)); break;
为什么在编译后我有一个错误:
error.c: In function 'error':
error.c:30:46: warning: 'char' is promoted to 'int' when passed through '...' [e
nabled by default]
case 0xfe: sprintf(buff,
我是C的新手,还在努力理解溢出是如何发生的。假设我们有下面的buggy代码来确定一个字符串是否比另一个字符串长:
int strlonger(char *s, char *t) {
return strlen(s) - strlen(t) > 0; // let's say the first return value of strlen(s) is s1, abd the second is s2
}
我们知道它不会工作,因为返回类型的strlen()是size_t,也就是unsigned int,所以当我们有1u - 2u > 0之类的东西时,左操作数溢出。
我
在我开始使用C#之前,我主要是有C/C++背景的。我在C#中的第一个项目中做的一件事就是创建一个这样的类
class Element{
public uint Size;
public ulong BigThing;
}
然后,我感到羞愧的是,这需要转换:
int x=MyElement.Size;
就像这样
int x=5;
uint total=MyElement.Size+x;
为什么语言设计者决定使有符号和无符号整数类型不能隐式强制转换?为什么在整个.Net库中没有更多地使用无符号类型呢?例如,String.Length永远不能为负,但它是一个带符号的整数。
我正在试图找出c中以下命令的最终结果,以及如何更好地解决这个问题。
这是我的变数。所有都是uint16或uint32类型的无符号整数。
CNT_A:这是一个uint32*,但表示微处理器中的16位读/写计数器寄存器。它直接指向这个寄存器的地址,因此它总是包含来自寄存器的值。它由处理器自动递增,但程序可以重置或写入设定值。从制造商的文档中,上面的16位是“保留”的,因此,我相信,总是报告0,不会实际写入,所以它实际上是一个16位的值。
*NOTE: `CNT_A` is always called as a `uint32` in the code, but it is declared as
在下面的代码部分,我与一群同事就问题的正确答案进行了长时间的讨论。我的答案依赖于stackoverflow.com上关于有符号整数溢出的几个讨论。所以,我告诉他们,选择应该包含“未定义的行为”,这应该是正确的答案。但他们说答案应该是(C),他们在许多提供相同问题和答案的网站上提供了一些相同问题的链接。我将引用他们提供的链接中所提供的问题、答案和解释。那么,正确的答案应该是什么呢?谢谢
如果您要编译和执行以下c++代码,将输出什么?
#include<stdio.h>
int main() {
char c=125;
c=c+10;
pri
例如:
unsigned int numA = 66; // or anything really
unsigned int numB = -numA;
unsigned int numC = numA & numB
我知道逐位补码运算符可以用来获得2的补码(与a+1结合使用)。
我问的原因是因为我在国际象棋引擎的一些代码中偶然发现了这一点。为了获得绝对速度,国际象棋引擎做了很多“老生常谈”的事情,特别是在每秒被调用数百万次的移动生成函数中。(它也没有帮助,因为它是一个魔术位板移动生成的例子-所有它们中最优化的)。尤其是这段国际象棋引擎代码,只有在gcc编译的情况下才能正确工作(我怀疑
我知道,如果数字后面跟着U后缀,它将被视为无符号。但是为什么下面的程序会打印变量i的正确值,即使它是用负值初始化的。(由gcc 4.9.2、4.8.2及4.7.1编制)
Program1.cpp
#include <iostream>
int main()
{
int i=-5U;
std::cout<<i; // prints -5 on gcc 4.9.2, 4.8.2, & 4.7.1
}
Program2.cpp
#include <iostream>
int main()
{
auto i=-5U;
std
当我第一次开始使用面向对象的编程语言时,我得到了以下规则:
在类中声明字段时,不要初始化它。在构造函数中这样做。
C#中的一个例子:
public class Test
{
private List<String> l;
public Test()
{
l = new List<String>();
}
}
但最近有人问我为什么要这么做,我想不出原因。我不太熟悉C# (或其他编程语言)的内部工作,因为我认为这可以在所有OO语言中实现。
那为什么要这么做?是保安吗?财产?