javascript

java

python

c#

android

c++

node.js

php

reactjs

jquery

html

css

ios

.net

git

ruby-on-rails

sql

c

string

ruby

java-如何在没有'*'运算符的情况下执行乘法?

在学习C时,我只是在学习一些基本知识。我遇到一个问题,是在不使用*运算符的情况下将数字乘以7。 基本上就是这样

      (x << 3) - x;

现在,我了解基本的位操作操作,但是如果不使用*运算符,如何将数字与其他奇数相乘就无法了? 有通用的算法吗?

trans by 2020-07-06T03:57:51Z

位操作-Java“位移”教程?

我要感谢一个很好的教程,该教程为Java新手解释了Java中所有“移位”如何工作。

我总是偶然发现它,但从未理解它是如何工作的。 它应该解释Java中字节移位/位操作可能实现的所有操作和概念。

这只是我的意思(但我正在寻找一个讲解每种可能操作的教程):

byte b = (byte)(l >> (8 - i << 3));
trans by 2020-07-02T15:38:45Z

c-快速计算64位整数的log2

很棒的编程资源,Bit Twiddling Hacks,在这里提出了以下方法来计算32位整数的log2:

#define LT(n) n, n, n, n, n, n, n, n, n, n, n, n, n, n, n, n
static const char LogTable256[256] = 
{
    -1, 0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3,
    LT(4), LT(5), LT(5), LT(6), LT(6), LT(6), LT(6),
    LT(7), LT(7), LT(7), LT(7), LT(7), LT(7), LT(7), LT(7)
};

unsigned int v; // 32-bit word to find the log of
unsigned r;     // r will be lg(v)
register unsigned int t, tt; // temporaries
if (tt = v >> 16)
{
    r = (t = tt >> 8) ? 24 + LogTable256[t] : 16 + LogTable256[tt];
}
else 
{
    r = (t = v >> 8) ? 8 + LogTable256[t] : LogTable256[v];
}

并提到

查找表方法仅需执行约7次操作即可查找日志 32位值。 如果扩展为64位,则需要 大约9次作业。

但是,可惜的是,它没有提供任何其他有关将算法扩展到64位整数的实际方法的信息。

关于这种64位算法的外观有何暗示?

trans by 2020-07-01T15:19:59Z

位操作-检查标志位j

我的标志位有问题。我有一个int变量来保存标志。 首先,我为该变量设置了一些标志。 稍后,我需要检查在该变量中设置了多少个标志。 但是我不知道这样做。

trans by 2020-06-30T06:03:11Z

算法-不使用'/'进行除法

谁能告诉我不使用'/'来执行除法运算的有效方法。 我可以使用类似于二进制搜索的方法以log(n)的步长计算整数值。

115/3 
57 * 3 > 115
28 * 3 < 115
47 * 3 > 115
.
.
.
38 * 3 is quotient value .....

但是还有其他更有效的方法吗?

trans by 2020-06-26T13:19:22Z

C中的位域操作

在C中测试和设置单个整数的经典问题可能是最常见的中级编程技能之一。 您可以设置和测试简单的位掩码,例如

unsigned int mask = 1<<11;

if (value & mask) {....} // Test for the bit
value |= mask;    // set the bit
value &= ~mask;   // clear the bit

一篇有趣的博客文章认为这容易出错,难以维护且操作不当。 C语言本身提供类型安全且可移植的位级别访问:

typedef unsigned int boolean_t;
#define FALSE 0
#define TRUE !FALSE
typedef union {
        struct {
                boolean_t user:1;
                boolean_t zero:1;
                boolean_t force:1;
                int :28;                /* unused */
                boolean_t compat:1;     /* bit 31 */
        };
        int raw;
} flags_t;

int
create_object(flags_t flags)
{
        boolean_t is_compat = flags.compat;

        if (is_compat)
                flags.force = FALSE;

        if (flags.force) {
                [...]
        }
        [...]
}

但这让我感到畏缩。

我和我的同事对此颇有意思的争论仍未解决。 两种样式都起作用,并且我认为经典的位掩码方法简单,安全且清晰。 我的同事都认为这是普通且容易的,但是位域联合方法值得用额外的几行内容来使其变得更加便携和安全。

双方还有其他论点吗? 特别是可能存在字节序方法可能遗漏但可能采用字节序的错误,但是结构方法在哪里安全?

trans by 2020-06-26T09:31:22Z

位操作-使用按位运算进行除法

如何使用按位运算符实现除法(不仅仅是除以2的幂)?

详细描述它。

trans by 2020-02-16T04:37:14Z

目标c-了解按位与运算

我一直在Kochan的书《 Objective-C中的编程》中阅读关于Objective-C的位运算符。

我对这部分感到非常困惑,尽管到目前为止我已经真正理解了大多数其他内容。

这是这本书的引文:

按位与运算符

按位与运算通常用于屏蔽操作。 也就是说,可以轻松地使用该运算符将数据项的特定位设置为0。例如,语句

w3 = w1 & 3;

将w1的值按位与常数3进行“与”运算。这具有将w中的所有位(除最右边的两位设置为0之外)以及保留w1的最右边两位相同的效果。

与C中的所有二进制算术运算符一样,通过添加等号,二进制位运算符也可以用作赋值运算符。 该声明

word &= 15;

因此执行以下功能:

word = word & 15;

此外,它还具有将单词的除最右边的四位之外的所有其他位都设置为0的作用。当在执行按位运算时使用常量时,通常更方便地以八进制或十六进制表示法来表示常量。

好的,这就是我要了解的内容。 现在,我对整个概念非常困惑,我只是想澄清一点,是否有人愿意在这方面帮助我。

当书中现在提到“设置所有位”时,所有位都正确。 那不是2进制的0或1,换句话说就是二进制的吗?

如果是这样,为什么在第一个示例中,除“最右边的2”之外的所有位都都设为0? 是2是因为它是3-1,所以我们的常数是3?

谢谢!

trans by 2020-02-12T05:57:47Z

C ++-将0x1234转换为0x11223344

如何以高性能方式将十六进制数0x1234扩展为0x11223344?

unsigned int c = 0x1234, b;
b = (c & 0xff) << 4 | c & 0xf | (c & 0xff0) << 8
        | (c & 0xff00) << 12 | (c & 0xf000) << 16;
printf("%p -> %p\n", c, b);

输出:

0x1234 -> 0x11223344

我需要此颜色转换。 用户以0xARGB的形式提供数据,我需要将其转换为RGB。是的,可能有数百万个,因为每个可能有一个像素。 1000x1000像素等于一百万。

实际情况更加复杂,因为单个32位值同时包含前景色和背景色。 因此RGB变为:[ 0xAARRGGBB, 0xaarrggbb ]

哦,是的,还有一件事,在真实的应用程序中,我也取反了alpha,因为在OpenGL中0xFF是不透明的,而0x00是最透明的,这在大多数情况下是不方便的,因为通常您只需要RGB零件并且假定透明度 不存在。

trans by 2020-02-11T02:12:04Z

算法-运作方式如何? 河内奇怪的塔解决方案

当我发现河内塔的这种不寻常的迭代解决方案时,我迷失在互联网上:

for (int x = 1; x < (1 << nDisks); x++)
{
     FromPole = (x & x-1) % 3;
     ToPole = ((x | x-1) + 1) % 3;
     moveDisk(FromPole, ToPole);
}

这篇文章的答案之一中也有类似的Delphi代码。

但是,对于我的一生来说,我似乎找不到很好的解释说明为什么这样做有效。

谁能帮助我理解它?

trans by 2020-02-04T18:58:00Z

c-有符号整数上的算术移位

我试图弄清楚算术位移位运算符在C中的工作方式,以及它将如何影响带符号的32位整数。

为了简单起见,假设我们在一个字节(8位)内工作:

x = 1101.0101
MSB[ 1101.0101 ]LSB

通过阅读Stack Overflow和一些网站上的其他文章,我发现:>> 7将朝MSB(在我的情况下为左侧)移动,并用0填充“空” LSB位。

并且>> 7将移至LSB(在我的情况下为右侧),并用MS位填充“空”位

因此,>> 7将导致将LSB移至MSB,并将所有内容都设置为0。

1000.0000

现在,让我说>> 7,最后一个结果。 这将导致[0000.0010]? 我对吗?

我对移位运算符的假设正确吗?

我刚在机器上测试过,**

int x = 1;   //000000000......01

x = x << 31; //100000000......00

x = x >> 31; //111111111......11 (Everything is filled with 1s !!!!!) 

为什么?

trans by 2020-01-30T06:55:04Z

java-往返于整数/长整数的BitSet

如果我想对整数进行位操作,如何将其加载到java.util.BitSet中? 如何将其转换回int或long? 我不太担心BitSet的大小-它总是32或64位长。 我只想使用set()clear()nextSetBit()nextClearBit()方法而不是按位运算符,但是我找不到一种简单的方法来用数字类型初始化位集。

trans by 2020-01-26T06:03:24Z

c-在不使用abs函数的if语句的情况下获取绝对值

我在考虑如何在不使用if语句或abs()的情况下获得整数的绝对值。起初,我在使用左移位(<<),试图将负号移出范围,然后将右移回原来的位置 ,但不幸的是,这对我不起作用。 请让我知道为什么它不起作用以及其他替代方法。

trans by 2020-01-19T21:56:19Z

c-警告:左移计数> =典型宽度

我是处理位的新手,在编译时会遇到以下警告:

sizeof

我的第7行看起来像这样

unsigned long int x = 1 << 32;

如果我的系统上sizeof的大小是32位,这将是有道理的。 但是,CHAR_BIT返回8,并且CHAR_BIT被定义为8,建议long应该是8x8 = 64位长。

我在这里想念什么? sizeofCHAR_BIT不正确还是我误解了一些基本知识?

trans by 2020-01-17T05:14:43Z

可以对两个整数进行异或运算吗?

我一直在研究用于在数组中查找孤独整数的算法,以下是实现:

int arr[] = {10, 20, 30, 5, 20, 10, 30};
int LonelyInteger = 0;
for(int i=0; i< 7; i++)
{
    LonelyInteger = LonelyInteger ^ arr[i];
}

其结果是5

我的问题是-由于此操作,整数(由XOR操作生成的获取)可能太大:

LonelyInteger ^ arr[i]

在这种情况下,这会导致潜在的大整数,而该整数不能用数据类型XOR表示。 我的问题是:

  1. XOR甚至可能会生成无法以int类型存储的大整数值吗?
  2. 如果不可能发生这种情况,那么有证据吗?
trans by 2020-01-15T11:31:02Z

如何在不使用++或+或其他算术运算的情况下将两个数字相加

如何在不使用++或+或任何其他算术运算符的情况下将两个数字相加?

这是很久以前在一些校园采访中问的一个问题。 无论如何,今天有人问了一些关于位操作的问题,在回答中提到了一个美丽的斯坦福钻头。 我花了一些时间研究它,并认为实际上可能是该问题的答案。 我不知道,我找不到。 是否存在答案?

trans by 2020-01-12T10:12:36Z

python-一元运算一元〜(反转)

~a操作员让我有些困惑。 代码如下:

a = 1
~a  #-2
b = 15
~b  #-16

~a如何工作?

我认为~a就像这样:

0001 = a
1110 = ~a 

为什么不?

trans by 2020-01-11T22:33:11Z

CodeGo.net>检查位是否设置或n

如何检查字节中的某个位是否已设置?

bool IsBitSet(Byte b,byte nPos)
{
   return .....;
}
trans by 2020-01-06T08:56:49Z

c ++-以有效方式对64位整数中的相邻位进行或运算

我想做的是获取一个由位对组成的64位无符号整数,并从中创建一个32位整数(如果相应对中的两位均为0,则包含0)。 换句话说,转换如下所示的内容:

01 00 10 11

变成这样的东西

1 0 1 1

两种明显的解决方案是蛮力循环或每个字节的查找表,然后进行八次查找,并通过“或”和移位将它们组合为最终结果,但我敢肯定应该有一种有效的方法来对此进行位纠缠 。 我将对C ++中的64位整数执行此操作,但是如果有人知道对较短的整数执行此操作的有效方法,我相信我可以弄清楚如何进行放大。

trans by 2020-01-03T21:55:23Z

SQL Server-是否有一种优雅的方法来反转SQL插入语句中的位值?

我正在SQL Server中转换一些数据:

INSERT INTO MYTABLE (AllowEdit)
(Select PreventEdit from SOURCETABLE)

所以我需要反转源表中的位值。 我希望NOT可以正常工作,因为这是我在代码中的处理方式,但事实并非如此。 我能想到的最优雅的方法是:

INSERT INTO MYTABLE (AllowEdit)
(Select ABS(PreventEdit -1) from SOURCETABLE)

有更标准的方法吗?

trans by 2019-11-14T11:21:04Z

1 2 3 4 下一页 共4页