给出了一个由Q个字符组成的非空零索引字符串S。该字符串的周期最小
正整数P使得:
?Q / 2和S [K] = S [K + P]为0?K <Q?P.
例如,“ pepsicopepsicopep”的时间段为7。如果M是N的二进制表示形式的周期,则正整数M是正整数N的二进制周期。
例如,1651的二进制表示形式为“ 110011100111”。因此,其二进制周期为5。另一方面,102没有二进制周期,因为它的二进制表示是“ 1100110”,并且它没有周期。
考虑上述情况,并用Java编写一个函数,该函数将接受整数N作为参数。给定正整数N,函数将返回N的二进制周期。如果N没有二进制周期,则函数应返回?1。
下面,我还提供了我曾为之努力的解决方案,我想知道是否还有其他更好的解决方案?
我有一个数字值的函数:
val = sum{(A[i])*(-2)^i}
Run Code Online (Sandbox Code Playgroud)
因此,可以在st -8is [0,0,0,1]和8is中完成表示位数组中的值[0,0,0,1,1].
请帮我写一个java方法,当我将一个十进制值传递给一个方法时,它将返回一个带有1和0的int数组,表示给定的十进制值.
Ex: when pass -8 , method returns [0,0,0,1].
when pass 8 , method returns [0,0,0,1,1].
Run Code Online (Sandbox Code Playgroud) 我正在使用fstream将整数写入二进制文件.
int main(){
fstream f1;
int num = 2, num2 = 0;
f1.open("dat1", ios::app | ios::out | ios::in | ios::binary);
f1.write((char *)num, sizeof(int));
f1.seekp(0);
f1.read((char *)num2, sizeof(int));
cout << num2;
}
Run Code Online (Sandbox Code Playgroud)
问题出在f1.write上.我可以写一个数组的二进制文件,但是当我尝试只编写一个int块时,它给了我一个错误:
Project.exe中0x522C7EA6(msvcp120d.dll)的未处理异常:0xC0000005:访问冲突读取位置0x00000002.
我不明白问题是什么.
这段代码应该将字符串转换为二进制字符串,但是有几个字符串,它返回一个String16位二进制数字,而不是我预期的那样的8位数字.
public class aaa {
public static void main(String argv[]){
String nux="ª";
String nux2="Ø";
String nux3="(";
byte []bites = nux.getBytes();
byte []bites2 = nux2.getBytes();
byte []bites3 = nux3.getBytes();
System.out.println(AsciiToBinary(nux));
System.out.println(AsciiToBinary(nux2));
System.out.println(AsciiToBinary(nux3));
System.out.println("number of bytes :"+bites.length);
System.out.println("number of bytes :"+bites2.length);
System.out.println("number of bytes :"+bites3.length);
}
public static String AsciiToBinary(String asciiString){
byte[] bytes = asciiString.getBytes();
StringBuilder binary = new StringBuilder();
for (byte b : bytes)
{
int val = b;
for (int i = 0; i < 8; i++)
{ …Run Code Online (Sandbox Code Playgroud) 因此,我的教授有一个问题要列出所有正数和负数,这些数字可以用一个,二个补码和符号量表示:
使用4位数,例如(5)10 =(0101)2写出所有正数和所有负数,可以用符号幅度,1的补码和2的补码表示4位.
现在,我不是在寻找澄清的答案.
谁能更好地解释这个问题?
我一直在努力将标准普尔500指数的价值(现在是1864.78)转换为它在内存中以IEEE单精度格式表示的价值.
转换小数点左边(1864)很容易.
11101001000.
但是如何获得十进制的二进制表示(.78)?我尝试使用该技术但它在8位指数IEEE格式上产生了许多数字:
.78*2 = 1.56 1
.56*2 = 1.12 1
.12*2 = .24 0
.24*2 = .48 0
.48*2 = .96 0
.96*2 = 1.92 1
.92*2 = 1.84 1
.84*2 = 1.68 1
.68*2 = 1.36 1
.36*2 = .72 0
.72*2 = 1.44 1
.44*2 = .88 1(向上舍入,因为现在我们总共有23位)
11101001000.110001111011 =尾数23位
添加0表示符号
0 11101001000.110001111011
现在我需要将小数移动10个以上
1.1101001000110001111011 x 2 ^ 10指数现在是10
添加0位以使全尾数为23位
1.11010010001100011110110
指数是10所以10 + 127 = 137
等于10001001
所以0 10001001 11010010001100011110110是32位数.
这看起来像是一个体面的方法吗?我测试了这个值并写下了这个问题,我实际上可以自己完成它.
用这个测试十进制FP. http://www.h-schmidt.net/FloatConverter/IEEE754.html
我以为x := make([]byte, N)应该定义一个N字节的片段.我得到0x015f82a975f9752b作为输出,在基数2中是:
0001 0101 1111 1000 0010 1010 1001 0111 0101 1111 1001 0111 0101 0010 1011
不是8. 我错过了什么?
请参阅genSalt()下面的功能及其输出.
package main
import (
"crypto/rand"
"crypto/sha256"
"fmt"
"golang.org/x/crypto/pbkdf2"
"log"
)
// generate a salt with N random bytes
func genSalt() []byte {
ret := make([]byte, 8) // N == 8 (..right?)
_, err := rand.Read(ret)
if err != nil {
log.Fatal(err)
}
return ret
}
// pbkdf2 with sha256
// returns sha256.Size == 32 …Run Code Online (Sandbox Code Playgroud) data Digit = Zero | One
convBNum :: [Digit] -> Int
convBNum [] = 0
convBNum (x:xs)
| x == One = 2^length xs + convBNum xs
| otherwise = convBNum xs
Run Code Online (Sandbox Code Playgroud)
这是将二进制数转换为int的简单函数的代码; 当我编译它时,它给了我这个错误:
no instance for (Eq Digit) arising from a use of ==
In the expression: x == One
Run Code Online (Sandbox Code Playgroud)
如果我理解得很好,也读了其他问题,问题是x不能是任何类型,但我无法理解如何解决这个问题以及如何使用Eq约束.
我在作业中被要求代表IEEE 754表示中的十进制0.1.以下是我做的步骤:
然而,在线转换器和堆栈交换的这个答案暗示不然.他们把这个解决方案:
s eeeeeeee mmmmmmmmmmmmmmmmmmmmmmm
0 01111011 10011001100110011001101
Run Code Online (Sandbox Code Playgroud)
差异是右边的数字1.为什么不是1100,为什么是1101?
最近我一直在玩Altair 8800仿真器以了解计算的基础知识,我想知道处理器如何"知道"字节是指令还是数据?