当前位置: 首页 > 知识库问答 >
问题:

在 C/C 中将整数转换为布尔值

邢晗日
2023-03-14

我知道在 C 和 C 中,当将布尔转换为整数时,(整型)真 == 1(整型)假 == 0。我想知道向相反方向投射...

在下面的代码中,以下所有断言在使用 Visual Studio 2013 和 Keil μVision 5 编译的 .c 文件中都适用。注意 (布尔)2 == 真

关于将非零、非一整数转换为布尔值,C和C标准有何规定?是否指定了此行为?请包括引文。

#include <stdbool.h>
#include <assert.h>

void TestBoolCast(void)
{
    int i0 = 0, i1 = 1, i2 = 2;

    assert((bool)i0 == false);
    assert((bool)i1 == true);
    assert((bool)i2 == true);

    assert(!!i0 == false);
    assert(!!i1 == true);
    assert(!!i2 == true);
}

对于任何C编译器,我可以假设(bool)true == (int)1不是重复的吗?

  1. 反向铸造(int--

共有3个答案

叶越
2023-03-14

有某种老式的“马克思主义”方式来塑造演员-

int  i  = 0;
bool bi = !!i;

int  j  = 1;
bool bj = !!j;
赵镜
2023-03-14
匿名用户

下面引用了C11标准(最终草案)。

6.3.1.2:将任意标量值转换为_Bool时,如果值比较等于0,则结果为0;否则,结果为1。

< code>bool(由< code>stdbool.h映射到C的内部名称< code>_Bool)本身是一个无符号整数类型:

...类型_Bool与标准有符号整数类型对应的无符号整数类型是标准无符号整数类型。

根据6.2.5p2:

声明为type _Bool的对象足够大,可以存储值0和1。

AFAIK这些定义在语义上与C相同-只是内置(!)名称略有不同。bool用于C,_Bool用于C。

注意,C没有像C那样使用术语“极值”。然而,在C语言中,指针是标量,因此将指针赋值给_Tool与C语言中的行为相同。

钱修雅
2023-03-14

0个基本类型的值(1)(2)映射到false

其他值映射为true

该公约是在原始C中通过其流量控制声明建立的;C 当时没有布尔类型。

假设作为函数返回值,false表示失败是一个常见的错误。但特别是从main中,false表示成功。我多次看到这样做是错误的,包括在D语言的Windows启动代码中(当像Walter Bright和Andrei Alexandresu这样的人出错时,它很容易出错),因此这个提醒要当心。

对于内置类型,无需强制转换为 bool,因为该转换是隐式的。但是,Visual C(微软的C编译器)倾向于为此发出性能警告(!),这是一个纯粹的愚蠢警告。一个演员不足以让它闭嘴,而是通过双重否定的转换,即返回!x,工作得很好。人们可以将!!

1)C 14§4.12/1“零值、空指针值或空成员指针值转换为false;任何其他值转换为true。对于直接初始化(8.5),std::nullptr_t类型的prvalue可以转换为bool类型的prvalue;生成的值为false。“
2)C99和C11§6.3.1.2/1”当任何标量值转换为_Tool时,如果值比较等于0,则结果为0;否则,结果为1。”

 类似资料:
  • 我需要将一个整数(代表x.509 KeyUsage掩码)转换为布尔数组,在Java中,我有以下可用函数,可以正常工作: 在这种情况下(144),它应该返回 密钥用法={boolean[9]@976}[0]=真[1]=假[2]=假[3]=真[4]=假[5]=假[6]=假[7]=假[8]=假 在Groovy中运行这个时,我得到 org.codehaus.groovy.control.MultipleC

  • PHP是否有任何内置函数可以接受布尔值并返回其整数等效值?0代表FALSE,1代表TRUE?当然,您可以轻松创建一个函数来做到这一点,我只是询问PHP内部是否有内置函数。我已经尝试了并将其转换为但它们不起作用,它们在TRUE和FALSE两种情况下都返回0。 编辑:问题是它不是真正的布尔值,而是一个字符串“false”、“true”,php没有检测到传递布尔值的jquery帖子。问题解决了,谢谢!

  • 问题内容: 在Java中将a转换boolean为an 的最常用方法是什么int? 问题答案: ^^ PS : true = 1 and false = 0

  • 问题内容: 我目前正在开发一个Scala应用程序,该应用程序利用Spring-Boot和Swagger发送和接收REST调用。 Swagger和Spring-Boot是纯Java项目,与Scala的兼容性有限,但是我似乎找到了解决该问题的方法。 由于Spring- Boot和Swagger将请求作为Java对象处理(需要使用setter和getter才能工作),因此我必须将请求视为Java对象,然

  • 问题内容: 有谁知道如何将包含json的字符串转换为C#数组。我有这个从webBrowser读取text / json并将其存储到字符串中。 只需要以某种方式将json字符串更改为数组即可。一直在查看Json.NET,但是我不确定那是否是我所需要的,因为我不想将数组更改为json。但是反过来。谢谢您的帮助! 问题答案: 只需使用字符串并使用JavaScriptSerializer将其反序列化为本地

  • 我试图理解以下转换的机制 根据整数常量,的类型是。这可以通过执行轻松检查; 根据内隐转换语义学: “整数提升是对秩小于或等于int[…]秩的任何整数类型的值的隐式转换设置为int或unsigned int类型的值。“ 如下文所述 msgstr"所有有符号整数类型的行列等于相应无符号整数类型的行列" 因此,升级适用,因为的秩与的秩相同。 这种晋升被定义为 如果int可以表示原始类型的整个值范围(或原