逻辑运算后十六进制转bin

发布于 2024-09-04 00:29:49 字数 459 浏览 3 评论 0原文

我想要:

111 || 100  ---> 111,  not 1
100 && 100  ---> 100,  not 1
101 && 010  ---> 000,  not 0

损坏的代码

#include <stdio.h>

main(void){
        string hexa = 0xff;
        strig hexa2 = 0xf1;

        // CONVERT TO INT??? cast
        int hexa3 = hexa || hexa2;
        int hexa4 = hexa && hexa2;

        puts(hexa3);
        puts(hexa4);
}

I want:

111 || 100  ---> 111,  not 1
100 && 100  ---> 100,  not 1
101 && 010  ---> 000,  not 0

Broken code

#include <stdio.h>

main(void){
        string hexa = 0xff;
        strig hexa2 = 0xf1;

        // CONVERT TO INT??? cast
        int hexa3 = hexa || hexa2;
        int hexa4 = hexa && hexa2;

        puts(hexa3);
        puts(hexa4);
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

夕色琉璃 2024-09-11 00:29:49

您需要按位运算符(|&)而不是逻辑运算符(||&&):

110 | 011 --> 111
110 & 101 --> 100

对于损坏的代码,您的 hexahexb 类型也不正确,它们都应该是数字类型:

int hexa = 0xff;
int hexa2 = 0xf1;

最后,要输出整数,您可以使用printf 来格式化它们:

printf("hexa3 = 0x%08x\n", heaxa3);   // display as 8 digit, 0 padded hex

You want the bitwise operators (|, &) instead of the logical operators (||, &&):

110 | 011 --> 111
110 & 101 --> 100

As for your broken code, you also have incorrect types for hexa and hexb which should both be numeric types:

int hexa = 0xff;
int hexa2 = 0xf1;

Finally, to output an integer, you would use printf to format them:

printf("hexa3 = 0x%08x\n", heaxa3);   // display as 8 digit, 0 padded hex
じее 2024-09-11 00:29:49
  1. string 在这里不是正确的数据类型。数字 0xff(二进制为 11111111)和字符串“0xff”之间存在很大差异。我假设你想处理前者;将字符串解析为整数本身就是一个完整的主题。对于 16 位序列来说,一种好的数据类型是unsigned int
  2. ||之间有很大区别和|。前者执行所谓的“逻辑”或:它将两个操作数转换为布尔值,然后如果至少有一个操作数为 true,则返回 true,否则返回 false。如果操作数为 0,则转换为 false,否则转换为 true。因此,对于您的示例,0xff 和 0xf1 都转换为 true,并且 true ||真==真。这就是为什么您的代码打印 1。

旁注:即使对于布尔值,||和|是不同的,因为短路:当你有一个 || 时b,仅当 a 为 false 时才计算 b。两个参数均针对 a | 求值b.。这很重要,即当两个操作数之一是具有副作用的函数调用时。

  1. string is not the right data type here. There is a big difference between the number 0xff (which is 11111111 in binary) and the string "0xff." I'm assuming you want to deal with the former; parsing strings into integers is an entire topic of its own. One good data type for a sequence of 16 bits is unsigned int.
  2. There is a big difference between || and |. The former does a so-called "logical" or: it converts both operands to a boolean and then return true if at least one of the operands is true, and false otherwise. A operand is converted into false if it is 0, true otherwise. Thus, for your example, 0xff and 0xf1 are both converted to true, and true || true == true. This is why your code prints 1.

Side note: even for booleans, || and | are different, because of short-circuiting: when you have a || b, b is only evaluated if a is false. Both arguments are evaluated for a | b. This matters, i.e., when one of the two operands is a function call with side-effects.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文