逻辑运算后的十六进制到bin

时间:2010-06-01 22:46:23

标签: c casting hex

我想:

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);
}

2 个答案:

答案 0 :(得分:11)

您希望按位运算符(|&)代替逻辑运算符(||&&):

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

答案 1 :(得分:1)

  1. string不是正确的数据类型。数字0xff(二进制为11111111)和字符串“0xff”之间存在很大差异。我假设你想要处理前者;将字符串解析为整数是一个完整的主题。 16位序列的一个好数据类型是unsigned int
  2. ||之间存在很大差异和|。前者执行所谓的“逻辑”或:它将两个操作数转换为布尔值,然后如果至少有一个操作数为真,则返回true,否则返回false。如果操作数为0,则转换为false,否则为true。因此,对于您的示例,0xff和0xf1都转换为true,并且为true || true == true。这就是您的代码打印1的原因。
  3. 旁注:即使是布尔,||和|因为短路而有所不同:当你有a || b时,只有a是假的,才会评估b。两个参数都针对a | b进行评估。这很重要,即当两个操作数之一是具有副作用的函数调用时。