关于位运算的bitcmp()

本文详细介绍了MATLAB中bitcmp函数的使用方法及注意事项,包括如何指定不同位数的取反操作,并通过示例展示了针对不同类型的整数进行取反后的二进制表示。

2018/3/19

最近这个命令困扰了周围许多人。

首先附上MathWorks的链接      点击打开链接

以下内容均是个人在matlab中输入尝试和结合网络查询,如有问题欢迎指出。

bitcmp(a)中若只有a一个参数,a为数字,默认为8位double类型。

可以用int8()等命令指定a类型。

若未指定a类型,取反时按'uint64'执行。

bitcmp(a,   )在很久之前的版本(如6.5版本)是输入两个数字,现在是新版了,对旧版不过多研究。 就是这么个东西让周围人一直输入纠结着。

bitcmp(a,'uint8')就是按8位取反。

>> a=31

a =

    31

>> dec2bin(a)

ans =

11111

>> dec2bin(bitcmp(a,'uint8'))

ans =

11100000

>> dec2bin(bitcmp(a,'uint16'))

ans =

1111111111100000

>> dec2bin(bitcmp(a,'uint32'))

ans =

11111111111111111111111111100000

>> dec2bin(bitcmp(a,'uint64'))

ans =

10000000000000000000000000000000000000000000000000000000000000000   %老师说可能是舍入误差引起的,多了一位
这些够暂时用的了。不够以后补上
### MATLAB中的位运算及其使用方法 MATLAB 提供了一系列用于执行按位逻辑运算的函数,这些函数可以对整数数据类型的二进制表示形式进行逐位操作。以下是常用的位运算符以及它们的功能: #### 常见的位运算符 1. **bitand(A, B)** 执行 A 和 B 的按位 AND 运算[^3]。 2. **bitor(A, B)** 执行 A 和 B 的按位 OR 运算[^3]。 3. **bitxor(A, B)** 执行 A 和 B 的按位 XOR (异或) 运算[^3]。 4. **bitcmp(A)** 返回 A 的补码(假设为无符号整数)[^3]。 5. **bitset(A, bit)** 将 A 的第 `bit` 位置设置为 1[^3]。 6. **bitget(A, bit)** 获取 A 的第 `bit` 位上的值(0 或 1)[^3]。 7. **bitshift(A, k)** 对 A 的每一位向左移动 `k` 位;如果 `k` 是负数,则向右移位[^3]。 #### 示例代码 以下是一个综合示例,展示如何在 MATLAB 中使用上述位运算功能: ```matlab % 定义两个变量 A = uint8(6); % 十进制 6 -> 二进制 0110 B = uint8(3); % 十进制 3 -> 二进制 0011 % 按位 AND 运算 C_and = bitand(A, B); % 结果为 0010 -> 十进制 2 disp(['bitand(A, B): ', num2str(C_and)]); % 按位 OR 运算 C_or = bitor(A, B); % 结果为 0111 -> 十进制 7 disp(['bitor(A, B): ', num2str(C_or)]); % 按位 XOR 运算 C_xor = bitxor(A, B); % 结果为 0101 -> 十进制 5 disp(['bitxor(A, B): ', num2str(C_xor)]); % 补码运算 C_cmp = bitcmp(A); % 默认按照 uint8 类型处理 disp(['bitcmp(A): ', num2str(C_cmp)]); % 设置指定位 D_set = bitset(A, 1); % 将 A 的最低位设为 1 disp(['bitset(A, 1): ', num2str(D_set)]); % 获取指定位 E_get = bitget(A, 3); % 获取 A 的第三位 disp(['bitget(A, 3): ', num2str(E_get)]); % 移位运算 F_shift_left = bitshift(A, 2); % 向左移两位 disp(['bitshift(A, 2): ', num2str(F_shift_left)]); G_shift_right = bitshift(A, -1); % 向右移一位 disp(['bitshift(A, -1): ', num2str(G_shift_right)]); ``` 运行以上代码会输出如下结果: ``` bitand(A, B): 2 bitor(A, B): 7 bitxor(A, B): 5 bitcmp(A): 249 bitset(A, 1): 7 bitget(A, 3): 1 bitshift(A, 2): 24 bitshift(A, -1): 3 ``` #### 注意事项 - 输入参数通常应为整数类型(如 `uint8`, `int16`),否则可能会引发错误或不符合预期的结果。 - 如果输入不是整数类型,可以通过 `uint8()`、`int16()` 等函数将其显式转换为目标类型[^3]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值