首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Excel公式转换为C#

Excel公式转换为C#
EN

Stack Overflow用户
提问于 2012-01-26 18:46:11
回答 3查看 1.3K关注 0票数 0

我是c#的新手,但试图从WPF中运行这个公式。

代码语言:javascript
复制
=(BIN2DEC(RIGHT(DEC2BIN(MOD(INT(A1/16777216), 256),8), 3)) * 16777216) + (MOD(INT(A1/65536), 256) * 65536) + (MOD(INT(A1/256), 256) * 256) + MOD(A1,256) 

开始试着工作,但我觉得我甚至没有接近.如果有人有任何指示.

代码语言:javascript
复制
decimal A1 = Convert.ToInt32(textBox1.Text);
A1 = (A1 / 16777216);
A1 = decimal.Truncate(A1);
A1 = decimal.Remainder(Left, Right);
Convert.ToByte(A1);
String Number = A1.ToString();
Number.Reverse();
Number.Remove(3);
Number.Reverse();
A1 = Convert.ToByte(Number);

等等..。

抱歉,如果我想做到这一点的话。

一个32位数字应该转换成一个8或9位数字(27位二进制)。如果生成一个9位小数,您将需要删除最重要的十进制数,以显示我想要的数字。

例子: 467597668转换为64944484

705313524人皈依为34224884人

4294967295人皈依为134217727人

我现在正在尝试,但得到一个不正确的号码?

代码语言:javascript
复制
        int A1 = Convert.ToInt32(textBox1.Text);
        A1 /= 16777216;
        A1 &= 7; 
        A1 *= 16777216;
        int A2 = (((A1 >> 16) & 255) << 16);
        int A3 = (((A1 >> 8) & 255) << 8);
        int A4 = (A1 & 255);
        textBox2.Text = (A1+A2+A3+A4).ToString();
EN

回答 3

Stack Overflow用户

发布于 2012-01-26 18:55:38

由于C#中有一个很好的整数类型和位操作,所以不必跳过与Excel相同的循环。

下面是如何转换初始部分(BIN2DEC(RIGHT(DEC2BIN(MOD(INT(A1/16777216), 256),8), 3)) * 16777216)

代码语言:javascript
复制
int A1 = Convert.ToInt32(textBox1.Text);
A1 /= 16777216; // This also truncates the result; INT(A1/16777216)
A1 &= 7; // This takes the last three bits of the number: BIN2DEC(RIGHT(DEC2BIN(MOD(A1,8),3))
A1 *= 16777216; // A1 * 16777216

(MOD(INT(A1/65536), 256) * 65536)(MOD(INT(A1/256), 256) * 256)MOD(A1,256)甚至更简单:

代码语言:javascript
复制
(((A1 >> 16) & 255) << 16)
(((A1 >> 8) & 255) << 8)
(A1 & 255)

>>的意思是“向右移动(二进制表示)”;<<的意思是“向左移动(二进制表示)”。平移一等于乘除或除以二,就像移动一个十进制等于乘或整除以十。

&的意思是按位表示AND。255是一个将最后八位设置为1的数字;与它一起保存原始数字的最后八位。

编辑:下面是您重写的更正版本,它返回正确的结果:

代码语言:javascript
复制
int A0 = 467597668;
int A1 = A0 / 16777216;
A1 &= 7;
A1 *= 16777216;
int A2 = (((A0 >> 16) & 255) << 16);
int A3 = (((A0 >> 8) & 255) << 8);
int A4 = (A0 & 255);
Console.WriteLine(A1 + A2 + A3 + A4);
票数 3
EN

Stack Overflow用户

发布于 2012-01-26 18:55:00

在我看来,一些基于常量和操作的位操作。在C#中,您应该简单地使用按位“和”(&)、“或”(|)和移位(<<>>)来实现。

票数 0
EN

Stack Overflow用户

发布于 2012-01-26 18:59:50

据我所知,这应该会有所帮助,

代码语言:javascript
复制
RIGHT(DEC2BIN(MOD(INT(A1/16777216), 256),8), 3)) * 16777216

等于

代码语言:javascript
复制
(((a1 / 16777216) % 256) & 7) * 16777216

您应该能够使用它来派生其他3个组件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9023562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档