MATLAB--Basics - Binary Logic

例1

Problem 15. Find the longest sequence of 1's in a binary sequence.

Given a string such as

 s = '011110010000000100010111'

find the length of the longest string of consecutive 1's. In this example, the answer would be 4.

Example:

 Input  x = '110100111'
 Output y is 3
function length_longest_consecutive_ones = longest_consecutive_ones(s)
    % Initialize variables
    count = 0;
    max_count = 0;
    
    % Loop through the string
    for i = 1:length(s)
        if s(i) == '1'
            count = count + 1;
        else
            if count > max_count
                max_count = count;
            end
            count = 0;
        end
    end
    
    % Check if the last sequence is the longest
    if count > max_count
        max_count = count;
    end
    
    % Output the length of the longest consecutive ones
    length_longest_consecutive_ones = max_count;
end

 使用示例:

s = '011110010000000100010111';
length_longest_consecutive_ones = longest_consecutive_ones(s);
disp(length_longest_consecutive_ones); % 输出结果

例2

Problem 2522. Convert given decimal number to binary number.

Convert given decimal number to binary number.

Example x=10, then answer must be 1010.

以下是一个简单的 MATLAB 程序,用于将给定的十进制数转换为二进制数:

function binaryNumber = decimalToBinary(decimalNumber)
    % 使用 MATLAB 内置函数 dec2bin 将十进制数转换为二进制字符串
    binaryString = dec2bin(decimalNumber);
    
    % 将二进制字符串转换为数字数组
    binaryNumber = str2num(binaryString(:))';
end

% 示例用法
decimalNumber = 10;
binaryNumber = decimalToBinary(decimalNumber);
disp(binaryNumber);

 将以上代码保存为名为 decimalToBinary.m 的 MATLAB 函数文件。然后,您可以通过调用 decimalToBinary 函数并传入十进制数来获取相应的二进制数。例如:

decimalNumber = 10;
binaryNumber = decimalToBinary(decimalNumber);
disp(binaryNumber);

这将输出:[1 0 1 0],表示十进制数 10 对应的二进制数为 1010。

例3

Problem 2678. Find out sum and carry of Binary adder

Find out sum and carry of a binary adder if previous carry is given with two bits (x and y) for addition.

Examples

Previous carry is 1 and x=y=1. Addition is 1 and carry is also 1.

Previous carry is 0 and x=y=1. Addition is 0 and carry is also 1.

Previous carry is 0 and x=1, y=0. Addition is 1 and carry is also 0.

(找出二进制加法器的和和进位,如果给定前一个进位以及两个位(x和y)进行相加。

示例

前一个进位为1,x=y=1。相加结果为1,进位也是1。

前一个进位为0,x=y=1。相加结果为0,进位为1。

前一个进位为0,x=1,y=0。相加结果为1,进位为0。)

下面是一个用 MATLAB 编写的函数来模拟二进制加法器的和与进位计算:

function [sum_result, carry_out] = binaryAdder(prev_carry, x, y)
    % 确定每个位的加法结果
    sum_result = xor(x, y);  % 位相加的结果(不考虑进位)
    
    % 计算进位
    carry_intermediate = and(x, y);  % 计算每个位的进位
    carry_out = or(carry_intermediate, and(prev_carry, sum_result));  % 加上前一个进位
    
    % 输出结果
    fprintf('相加结果为 %d,进位为 %d\n', sum_result, carry_out);
end

% 示例用法:
% 前一个进位为1,x=y=1
[sum1, carry1] = binaryAdder(1, 1, 1);

% 前一个进位为0,x=y=1
[sum2, carry2] = binaryAdder(0, 1, 1);

% 前一个进位为0,x=1,y=0
[sum3, carry3] = binaryAdder(0, 1, 0);

 这个函数 binaryAdder 接受三个输入参数:prev_carry 表示前一个进位(0 或 1),xy 是两个要相加的二进制位(也是 0 或 1)。函数首先使用 XOR 操作计算出相加的结果 sum_result,然后使用 AND 操作计算每个位的进位 carry_intermediate。最后,根据前一个进位和 sum_result 计算最终的进位 carry_out

例4

Problem 34. Binary numbers

Given a positive, scalar integer n, create a (2^n)-by-n double-precision matrix containing the binary numbers from 0 through 2^n-1. Each row of the matrix represents one binary number. For example, if n = 3, then your code could return

>> binary_numbers(3)

ans =

     1     1     1
     0     0     0
     0     1     1
     0     1     0
     0     0     1
     1     0     0
     1     1     0
     1     0     1

The order of the rows does not matter.

给定一个正的标量整数n,创建一个大小为(2^n)-by-n的双精度矩阵,其中包含从0到2^n-1的二进制数。矩阵的每一行表示一个二进制数。例如,如果n = 3,则你的代码可以返回:

function matrix = binary_numbers(n)
    matrix = zeros(2^n, n);
    for i = 0:2^n-1
        binary_rep = dec2bin(i, n);
        matrix(i+1, :) = str2double(num2str(binary_rep)')';
    end
end

dec2bin将十进制数转换为以二进制数表示的字符数组

语法
binStr = dec2bin(D)
D - 输入数组

输入数组,指定为数值数组。

如果 D 是浮点数数组,并且 D 的任何元素都包含小数部分,则在转换前,dec2bin会将其截断。例如,dec2bin 将12和12.5都转换为 '1100'。截断结果始终是小于或等于该元素最接近的整数。

如果 D 是字符数组或逻辑数组,则dec2bin将D的元素视为整数。但是,dec2bin将字符视为其 Unicode® 值,因此不建议将 D 指定为字符数组。

        从 R2020a 开始,D 可以包含负数。该函数使用 2 的二进制补码值来转换负数。

binStr = dec2bin(D,minDigits)
minDigits - 输出中的最小位数

输出中的最小位数,指定为整数。

如果 D 可以用少于 minDigits 位的二进制位来表示,则 dec2bin 会用前导零填充输出。

如果 D 太大,必须用超过 minDigits 的位来表示,则 dec2bin 将用所需位数返回输出。

注意:

如果输入参数 D 的值大于flintmax返回的值,则dec2bin可能不会返回精确的表示。

无论计算机是使用 big-endian 还是 little-endian 格式在内存中存储值,dec2bin的输出都是相同的。

说明
binStr = dec2bin(D) 返回数字 D 的二进制(即以 2 为基数)表示。输出参数 binStr 是一个字符向量,它使用字符 '0' 和 '1' 表示二进制位。如果 D 是数值向量、矩阵或多维数组,则 binStr 是二维字符数组。binStr 的每行表示 D 的一个元素。

binStr = dec2bin(D,minDigits) 返回不少于 minDigits 位数的二进制表示。
————————————————
原文链接:https://blog.csdn.net/jk_101/article/details/110186263


例5

Problem 108. Given an unsigned integer x, find the largest y by rearranging the bits in x

Given an unsigned integer x, find the largest y by rearranging the bits in x.

Example:

 Input  x = 10
 Output y is 12

since 10 in binary is 1010 and 12 in binary is 1100.

(给定一个无符号整数x,重新排列x中的位,找到最大的y。

例如:

输入 x = 10

输出 y 是 12

因为10的二进制是1010,12的二进制是1100。)

function max_rearranged_integer = max_rearranged_integer(x)
    % Convert x to binary string
    binary_x = dec2bin(x);
    
    % Find the length of the binary representation
    len = length(binary_x);
    
    % Initialize a binary string to store the rearranged bits
    rearranged_binary = '';
    
    % Sort the binary string in descending order
    sorted_binary = sort(binary_x, 'descend');
    
    % Pad the sorted binary string with zeros to make its length equal to the original
    sorted_binary = [sorted_binary, repmat('0', 1, len - length(sorted_binary))];
    
    % Convert the rearranged binary string to decimal
    max_rearranged_integer = bin2dec(sorted_binary);
end

使用示例:

x = 10;
max_rearranged_integer = max_rearranged_integer(x);
disp(max_rearranged_integer); % 输出结果

 例6

Problem 1295. Bit Reversal

Given an unsigned integer x, convert it to binary with n bits, reverse the order of the bits, and convert it back to an integer.

(给定一个无符号整数 x,将其转换为具有 n 位的二进制数,反转位的顺序,然后将其转换回整数。)

function reversed_integer = reverseBits(x, n)
    % 将无符号整数 x 转换为 n 位二进制数
    binary_str = dec2bin(x, n);
    
    % 反转二进制数的顺序
    reversed_binary_str = fliplr(binary_str);
    
    % 将反转后的二进制数转换回整数
    reversed_integer = bin2dec(reversed_binary_str);
end

 然后,你可以调用这个函数来实现你的目标,比如:

x = 10; % 例如,给定的无符号整数为 10
n = 8;  % 指定二进制数的位数为 8

reversed_integer = reverseBits(x, n);
disp(reversed_integer); % 显示结果

这将给你反转后的整数。

例7

Problem 1547. Relative ratio of "1" in binary number

Input(n) is positive integer number

Output(r) is (number of "1" in binary input) / (number of bits).

Example:

  • n=0; r=0
  • n=1; r=1
  • n=2; r=0.5

(输入(n)是正整数。

输出(r)是二进制输入中“1”的数量除以位数。

例如:

n=0; r=0

n=1; r=1

n=2; r=0.5)

function r = binary_ones_ratio(n)
    % 转换为二进制字符串
    binary_rep = dec2bin(n);
    
    % 计算二进制字符串中的1的数量
    count_ones = sum(binary_rep == '1');
    
    % 计算二进制字符串的位数
    num_bits = length(binary_rep);
    
    % 计算比率
    r = count_ones / num_bits;
end

 使用示例:

n = 0;
r = binary_ones_ratio(n);
disp(r);  % 输出结果

n = 1;
r = binary_ones_ratio(n);
disp(r);  % 输出结果

n = 2;
r = binary_ones_ratio(n);
disp(r);  % 输出结果

这个程序将输入的正整数转换为其二进制表示,然后计算二进制表示中的1的数量以及二进制位数,并返回1的数量与位数之比作为输出(r)。

例8

Problem 2891. Binary code (array)

Write a function which calculates the binary code of a number 'n' and gives the result as an array(vector).

Example:

 Input  n = 123
 Output y =[1,1,1,1,0,1,1]

(编写一个函数,计算一个数字 'n' 的二进制代码,并将结果作为数组(向量)给出。

示例:

输入 n = 123 输出 y = [1,1,1,1,0,1,1]“在MATLAB中,)

function binary_array = decimalToBinary(n)
    % 计算数字 n 的二进制代码
    binary_str = dec2bin(n);
    
    % 将二进制字符串转换为数组
    binary_array = str2num(binary_str')';
end

 然后,你可以调用这个函数来实现你的目标,比如:

n = 123; % 例如,给定的数字为 123

binary_array = decimalToBinary(n);
disp(binary_array); % 显示结果

这将给你数字 123 的二进制表示形式的数组。

例9

Problem 43977. Converting binary to decimals

Convert binary to decimals.(将二进制转换为十进制)

Example:

010111 = 23.

110000 = 48.

% 示例 1
binary_str1 = '010111';
decimal1 = bin2dec(binary_str1);
disp(decimal1); % 显示结果:23

% 示例 2
binary_str2 = '110000';
decimal2 = bin2dec(binary_str2);
disp(decimal2); % 显示结果:48

 这将把二进制数转换成十进制数。

例10

Problem 2869. There are 10 types of people in the world

Those who know binary, and those who don't.

The number 2015 is a palindrome in binary (11111011111 to be exact) Given a year (in base 10 notation) calculate how many more years it will be until the next year that is a binary palindrome. For example, if you are given the year 1881 (palindrome in base 10! :-), the function should output 30, as the next year that is a binary palindrome is 1911. You can assume all years are positive integers.

Good luck!!kcul dooG

(“懂二进制的人,和不懂的人。

数字 2015 是一个二进制回文数(确切地说是11111011111)。给定一个年份(以十进制表示),计算还有多少年才能到达下一个是二进制回文数的年份。例如,如果给定的年份是1881(在十进制中是回文数!:-),函数应该输出30,因为下一个是二进制回文数的年份是1911。你可以假设所有年份都是正整数。

祝你好运!!kcul dooG“)

function years_until_binary_palindrome = nextBinaryPalindrome(year)
    % 寻找下一个二进制回文数的年份
    
    % 定义函数:判断一个数字是否是二进制回文数
    is_binary_palindrome = @(num) isequal(dec2bin(num), fliplr(dec2bin(num)));
    
    % 循环遍历年份,直到找到下一个二进制回文数的年份为止
    next_year = year + 1;
    while ~is_binary_palindrome(next_year)
        next_year = next_year + 1;
    end
    
    % 计算还需多少年才能到达下一个二进制回文数的年份
    years_until_binary_palindrome = next_year - year;
end

 然后,你可以调用这个函数来计算给定年份距离下一个二进制回文数年份的年数,比如:

year = 1881; % 给定的年份

years_until_binary_palindrome = nextBinaryPalindrome(year);
disp(years_until_binary_palindrome); % 显示结果

这将给出离给定年份最近的下一个二进制回文数年份的年数。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值