C++ 在C语言中,两个假(零)和#x27;我们在一起是真的吗?
我知道,只有当语句通过C++ 在C语言中,两个假(零)和#x27;我们在一起是真的吗?,c++,boolean-logic,C++,Boolean Logic,我知道,只有当语句通过或/和等任何方式计算为true时,语句才有效 我不明白为什么计算机至少不能理解C++。< /P> #include <stdio.h> #include <stdbool.h> int main(void) { // your code goes here if(false && false) printf("true\n"); else printf("false\n");
或/和等任何方式计算为true时,语句才有效
我不明白为什么计算机至少不能理解C++。< /P>
#include <stdio.h>
#include <stdbool.h>
int main(void) {
// your code goes here
if(false && false)
printf("true\n");
else
printf("false\n");
return 0;
}
所以在这种情况下,我还没有开始组合数据包,数据包的大小可以适合组合数据包
但是在这种情况下,不管数据包是否已经开始合并,或者还没有开始合并但仍然可以合并,它都不会尝试合并它
我想我需要把它分成更多的if语句
编辑3:真实代码
/* pull packets from packet list into buf, and erase/free them */
static int pull_packets(packet_list_t *l, uint8_t *buf, bool cluster) {
int bytes_placed = 0;
int offset = 0;
bool building_cluster = false;
int MAX_CLUSTER_SIZE = 0xFF; //maybe make this a constant? 0xFF bytes is the payload max.
while(l->begin() != l->end()) {
PACKET *p = *l->begin();
/* if you are building a cluster and the packet can't be clustered you can't send a regular packet anymore */
/* otherwise just send it as a regular packet, ignore any clustering */
if(building_cluster && p->len > MAX_CLUSTER_SIZE)
break;
else //else if(!building_cluster && p->len > MAX_CLUSTER_SIZE)
cluster = false;
/* if theres room in the packet for cluster+cluster len+[packet] */
if(cluster && p->len <= (MAX_PACKET - offset)) {
if(!building_cluster) {
//starts a new cluster packet
bytes_placed = build_packet( buf, "BBBX", 0x00, 0x0e, p->len, p->data, p->len);
offset += bytes_placed;
building_cluster = true;
free_packet(p);
l->erase(l->begin());
} else {
//appends to existing cluster packet
bytes_placed = build_packet( &buf[offset], "BX", p->len, p->data, p->len);
offset += bytes_placed;
free_packet(p);
l->erase(l->begin());
}
} else {
/* can't create cluster or cluster is filled up */
if(building_cluster) //has a previous cluster in progress
break;
//cluster is filled up
bytes_placed = build_packet(buf, "X", p->data, p->len);
free_packet(p);
l->erase(l->begin());
return bytes_placed;
}
}
return offset;
}
逻辑and具有以下值表:
- true&&true=>true
- true&&false=>false
- false&&true=>false
- false&&false=>false
仅当两个操作数都为真时,结果才为真。事情就是这样。这才是真正的逻辑。如果你不相信我,就看这本书。它对“和”的定义如上所述
如果您想要一个条件,如果两个操作数的值相同(例如,均为真或均为假),则只需使用If(a==b)
我认为您可能将假和假与双反混淆起来。当双否定变为肯定时,C和C++中表达的方式是<代码>!错误
或!0
您的问题描述和代码有点模糊,但假设您真正想要的是:
- 如果不在组合数据包中,但当前数据包太大,
则发送当前数据包
- 如果在组合数据包中,但当前数据包太大,
则发送组合数据包,然后发送当前数据包
- 如果不在组合数据包中,但当前数据包很小,
则断开进行组合
- 如果在组合数据包中,但当前数据包很小,
则断开以进行组合
假设上面所说的是正确的,那么你只需要检查一下你当前的数据包是否小,是否合适,否则你需要转发数据包
看一下您的实际代码,您当前是否正在构建集群,以及当前数据包是否适合您的集群,似乎存在一些令人困惑的逻辑。您将受益于以下简化的结构。下面的伪代码大致遵循了我最初的建议,但围绕循环的实际运行方式进行了裁剪
bool start = true;
while (packet = head of list of packets) {
if (packet will fit cluster) {
if (start) {
initialize cluster with packet;
start = false;
} else {
add packet to cluster;
}
remove from head;
} else {
if (start) {
initialize cluster with XL packet;
remove from head;
}
break;
}
}
&&
操作与协议无关
此处的false
值与否定无关
此处的false
值是值
&
操作是一个函数,定义为true
&
true
yeildstrue
和任何其他组合都会生成值false
简而言之,a&b
是
a && b = f(a, b)
where
f(a, b) = { false | a = false, b = false
{ false | a = true, b = false
{ false | a = false, b = true
{ true | a = true, b = true
&&
是一种表示布尔and运算的计算机操作。它是在布尔数系统中正式定义的,通常用布尔逻辑来研究。这与这种逻辑无关。这是关于处理逻辑的。在编程语言中,当您具有以下内容时:
if (false && false) { ... }
由于&
的原因,编译器会在if
中看到选项。然后计算第一个值,即false
。从这一点来看,对下一个表达式的求值没有意义——因为第一个表达式的求值结果是false
,所以没有必要对后面的表达式求值,因为这是一个自动的整体false:false&
这就是为什么下面的说法是正确的:
- true&&true=>true
- true&&false=>false
- false&&true=>false
- false&&false=>false
…编译器看到它的方式(如停止计算的位置)是:
- true&&true=>true
- true&&false=>false
- false&[这甚至没有被计算]=>false
- false&[这甚至没有被计算]=>false
查看此“真值表”:
您正在寻找的操作可能是“独占或”,这是“独占或”的“非”。在数学中,异或由一个圆圈表示,圆圈中有一个+
,当用于按位计算时,在基于C的语言中由^
符号表示。对于“逻辑”计算,“异或”可以用“不等于”运算符表示(而“异或”是“等于”运算符)。您了解布尔与布尔相等之间的区别吗?false和false是false。这是C++所使用和使用的一个基本逻辑。它与计算机毫无关系。这就是它在Math和其他任何地方的情况。它是真正的逻辑:“考虑<代码>一条狗有三条腿,猫有五条腿< /代码> -这两个子语句都是错误的,组合语句也是如此。我想如果USER 3535580要求我归还我借用的割草机并修复我断开的引擎,那么,两种做法都不符合他的要求,也没关系:)听你母亲的话——两种错误都不能成为正确!这不仅是它的方式,也是“和”一词在现实生活中的使用方式。是的,但是有没有任何逻辑可以确定假与假
是否变成真
和真与真
变成真
只有失败才会是假
或真与假
?这就是我的问题。正如我所写的-(a==b)
将导致true
如果a和b都是true或false。逻辑相等是您正在寻找的构造。不符合逻辑和逻辑。如果你谈论“逻辑and”,那么你基本上总是谈论我在我的帖子中详细介绍的逻辑。@user3435580——对于逻辑表达式,你谈论的是“排他的NOR”。@RetoKoradi——在英语中有一个不同的问题,因为它经常被解释为逻辑
a && b = f(a, b)
where
f(a, b) = { false | a = false, b = false
{ false | a = true, b = false
{ false | a = false, b = true
{ true | a = true, b = true
if (false && false) { ... }