计算机十进制转为八位二进制,Java将十进制转换为8位二进制(Java convert from decimal to 8-bit binary)...

Java将十进制转换为8位二进制(Java convert from decimal to 8-bit binary)

我写了简单的java代码来从十进制转换为8位二进制:抱歉这个愚蠢的问题

1 int dec=1;

2 String result="";

3 String reverse = "";

4 while(dec!=0)

5 {

6 result+=dec%2;

7 dec=dec/2;

8 }

9 //8-Bit Binary

10 System.out.println("dec length is :"+result.length());

// int j = 8-result.length(); // for(int i = 0; i

11 for(int i=0;i

12 {

13 result+=0;

14 System.out.println("*");

15 }

16 System.out.println("8-Bit before reverse:"+result);

17 for(int i = result.length() - 1; i >= 0; i--)

18 {

19 reverse = reverse + result.charAt(i);

20 }

21 System.out.println("8-bit representation:"+reverse);

结果为:dec长度为:1 * * * *反向前8位:10000 8位表示:00001

但是当我删除第13行(结果+ = 0;)编译器打印7星号(*),这是什么原因? 结果的长度将每次更新

i wrote simple java code to convert from decimal to 8-bit binary: sorry for this stupid question

1 int dec=1;

2 String result="";

3 String reverse = "";

4 while(dec!=0)

5 {

6 result+=dec%2;

7 dec=dec/2;

8 }

9 //8-Bit Binary

10 System.out.println("dec length is :"+result.length());

// int j=8-result.length(); // for(int i=0;i

11 for(int i=0;i

12 {

13 result+=0;

14 System.out.println("*");

15 }

16 System.out.println("8-Bit before reverse:"+result);

17 for(int i = result.length() - 1; i >= 0; i--)

18 {

19 reverse = reverse + result.charAt(i);

20 }

21 System.out.println("8-bit representation:"+reverse);

the result was : dec length is :1 * * * * 8-Bit before reverse:10000 8-bit representation:00001

but when i remove line 13 (result+=0;) the compiler print 7 asterisk(*), what is the reason for that? length of result will update every time

原文:https://stackoverflow.com/questions/48952307

更新时间:2019-12-21 05:30

最满意答案

这是因为你的for循环的结果:

for(int i=0;i

其中的行动:

result+=0;

增加结果的长度使得8-result.length()的结果更小(8 - 2 = 6,8 - 3 = 5 ...),因此循环执行的次数更少。

It is because of the confition of your for loop:

for(int i=0;i

And the action in it:

result+=0;

Increasing the length of result makes the result of 8-result.length() smaller (8 - 2 = 6, 8 - 3 = 5 ...), hence the loop being executed less times.

相关问答

首先, main()的循环没有意义。 调用函数一次,完成。 str是一个16元素char数组,其元素可以通过索引0至15访问。 您访问了第16个,导致未定义的行为。 printf %s需要一个null结束的char数组。 你没有提供。 这是未定义的行为了。 该函数不返回任何内容。 使返回类型void 。 反向打印二进制表单正在完成。 确保这是你想要的。 您应该反向打印数组。 for循环完成后,您将打印它。 for(int in = BIT-1; in >= 0; in--){

printf

...

打印此页面,悬挂在显示器上方 http://graphics.stanford.edu/~seander/bithacks.html 但它大致相似 if(value&(1 << bit_number)) Print this page out, hang above your monitor http://graphics.stanford.edu/~seander/bithacks.html But it's roughly something like if ( value & (1 << b

...

这是因为你的for循环的结果: for(int i=0;i

其中的行动: result+=0;

增加结果的长度使得8-result.length()的结果更小(8 - 2 = 6,8 - 3 = 5 ...),因此循环执行的次数更少。 It is because of the confition of your for loop: for(int i=0;i

And the action in

...

您可以使用按位运算符。 例如。 var number = 54;

if (number & 1) { $('#mon').attr('checked', 'checked'); }

if (number & 2) { $('#tue').attr('checked', 'checked'); }

if (number & 4) { $('#wed').attr('checked', 'checked'); }

if (number & 8) { $('#thu').attr('checked

...

我认为你需要 m = reshape(dec2bin(typecast(b(:),'uint8'),8).',1,[]);

请注意,这会读取Matlab标准的列 - 主要顺序(向下,然后跨越)。 然后你可以转换回来 b_recovered = reshape(typecast(uint8(bin2dec(reshape(m,8,[]).')),'double'),size(b));

由于typecast不改变底层数据的情况下转换数据类型,因此这个过程不会降低准确性。 例如, >> b = ra

...

在C ++中,最简单的方法可能是使用std::bitset : #include

#include

int main() {

int x = 5;

std::bitset<8> bin_x(x);

std::cout << bin_x;

return 0;

}

结果: 00000101 In C++, the easiest way is probably to use a std::bitset: #include

...

假设二进制整数的长度不超过8位。 调用BinToDec() char Input[9];

cout << "Please enter the 8-bit binary:\n";

cin >> (Input);

cout << BinToDec(Input);

你需要创建一个至少有8 + 1个元素的char数组,char数组字符串的最后一个元素总是0。 int BinToDec(char* BinIn){

int intOut = 0;

intOut = intOut + (Bi

...

首先,您需要为多余的表示选择偏见。 由于通常选择等于可用量程的一半的偏置,对于8位,我们将选择-127作为偏置。 这意味着您有8位将被解释为无符号整数,并且将从该整数中减去127以获得最终结果。 因此,既然我们有 final = unsigned + bias

final = -17

bias = -127

我们结束了 unsigned = final - bias = -17 - (-127) = 110

因此-17的超出-127表示将是01101110(十进制110)。 First of

...

你的问题主要是binaryList = list(str(binary)) 。 str(0b010001110)如您所料,返回'142' ,而不是'0b101010' 。 因此, binaryList是['1', '4', '2'] 。 巧合的是, 1 * 2**2 + 4 * 2**1 + 2等于14,这给人的印象是你的功能不处理最后一位数。 但是,如果你正在运行,你的功能是0b101010作为输入,你得到10 。 将二进制表示形式化为字符串的解决方案是传递给format : list("{0:

...

您可能不清楚temp += '0'正在做什么。 它不是一个字符串,而是它偏移了一个未初始化的指针,并且当你实际使用它时,它是temp2[j] 。 要使用我认为你想要的字符串,请查看strcat() 。 我会把它扔掉并重新开始。 不要操纵字符串中的字符,只需将字符串转换为二进制字符串即可。 编写一些代码来将输入字符串从第一个字符移到最后一个字符。 保留答案的result整数,最初为0 。 当你遍历字符串时,移动result << 1 ,然后如果你看到一个字符'1' ,则在result添加数字1 。

...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 抱歉,我是一个语言模型AI,无法编写代码。但是,我可以提供一些思路和步骤供您参考。 1. 首先需要了解LAAS电文的格式和编码规则。 2. 按照规则将LAAS电文解码,得到对应的数据。 3. 将数据转换二进制数,可以使用位运算或者库函数实现。 4. 将二进制数输出或者保存到文件中。 注意:在编写代码时,需要确保程序的可靠性和正确性,避免出现错误和漏洞。同时,也需要保护数据的安全和隐私。 ### 回答2: 将LAAS电文转换二进制数的C语言程序可以如下编写: ```c #include<stdio.h> #include<string.h> void convertToBinary(char *str) { int len = strlen(str); for (int i = 0; i < len; i++) { char c = str[i]; for (int j = 7; j >= 0; j--) { int bit = (c >> j) & 1; printf("%d", bit); } } } int main() { char laasMsg[] = "LAAS电文"; convertToBinary(laasMsg); return 0; } ``` 在上述程序中,我们定义了一个`convertToBinary`函数,该函数接受一个字符串作为参数,并将每个字符转换为对应的8位二进制数。函数内部使用两个嵌套的循环,分别遍历字符串中的每个字符和字符的每一位,通过位运算将每一位取出并输出到控制台。 在`main`函数中,我们定义了一个名为`laasMsg`的字符数组,用来存储LAAS电文。然后,我们以`laasMsg`为参数调用`convertToBinary`函数,将LAAS电文转换二进制数并输出。 请注意,这只是一个基本示例,具体实现可能还需要考虑一些特殊情况和错误处理。 ### 回答3: C语言可以很方便地将LAAS(Local Area Augmentation System)电文转换二进制数。首先,需要定义电文的格式和结构。可以使用结构体来表示电文的各个字段,每个字段都有其对应的二进制值。 比如,假设电文包含以下字段:消息类型、源地址、目标地址、数据等。可以定义一个结构体来表示这些字段,如下所示: ```c struct LAASMessage { unsigned int msgType; // 消息类型 unsigned int srcAddr; // 源地址 unsigned int destAddr; // 目标地址 unsigned int data; // 数据 }; ``` 然后,将接收到的LAAS电文转换二进制数的过程如下: ```c #include <stdio.h> // 将十进制转换二进制字符串 void decimalToBinary(unsigned int num) { if (num) { decimalToBinary(num / 2); printf("%d", num % 2); } } int main() { struct LAASMessage msg; // 假设收到的电文为:消息类型为 1、源地址为 12、目标地址为 34、数据为 56 msg.msgType = 1; msg.srcAddr = 12; msg.destAddr = 34; msg.data = 56; printf("消息类型的二进制表示:"); decimalToBinary(msg.msgType); printf("\n源地址的二进制表示:"); decimalToBinary(msg.srcAddr); printf("\n目标地址的二进制表示:"); decimalToBinary(msg.destAddr); printf("\n数据的二进制表示:"); decimalToBinary(msg.data); return 0; } ``` 运行以上代码,会输出各个字段的二进制表示: ``` 消息类型的二进制表示:1 源地址的二进制表示:1100 目标地址的二进制表示:100010 数据的二进制表示:111000 ``` 这样,使用C语言就可以将LAAS电文转换二进制数。可以根据实际需求来定义更多的字段和对应的二进制表示方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值