<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
//val表示需要移位的數 n表示移位位數 //位元組數乘以8代表一共多少位 //向右迴圈移n位的結果:假設資料一共size位,向左移size-n位,再與原數右移n位進行或操作的結果 uint32 bit_move(uint32 val, int n) { uint32 size = sizeof(val) * 8; n = n % size; //return (val >> (size - n) | (val << n));//左移 return (val << (size - n) | (val >> n));//右移 }
如果出現標頭檔案報錯,去我主頁搜關鍵詞“bits/stdc++.h”
#include<bits/stdc++.h> using namespace std; typedef unsigned short int uint16; typedef unsigned int uint32; uint32 bit_move(uint32 val, int n) { uint32 size = sizeof(val) * 8; n = n % size; //return (val >> (size - n) | (val << n)); return (val << (size - n) | (val >> n)); } int main() { uint16 a; //cin >> hex >> a; scanf_s("%hd", &a);//16進位制的兩種輸入方式 (這個地方如果是十進位制輸入,會棧溢位,為什麼?) cout << "原始資料的二進位制16位元表示: " << bitset<16>(a) << endl; uint32 a1 = (uint32)a; cout << "轉換為32位元后,右移之前的值:" << bitset<32>(a1) << endl; uint32 res = bit_move(a1, 2); cout << "右移2位後結果: " << bitset<32>(res) << endl; //for (int i = 1; i < 3; i++) { // a1 = bit_move(a1, 1); // cout << "右移"<< i << "位後結果: "<< bitset<32>(a1) << endl; //} return 0; }
執行結果
2
原始資料的二進位制16位元表示: 0000000000000010
轉換為32位元后,右移之前的值:00000000000000000000000000000010
右移2位後結果: 10000000000000000000000000000000
輸入16進位制的方式
cin >> hex >> a; scanf_s("%hd", &a)
int型 輸出x位二進位制的方式
cout << bitset<32>(x) << endl;//如果輸出64位元,則填64
這個地方如果是十進位制輸入,會棧溢位,為什麼?因為定義在棧上的區域性變數a為16位元,如果按%d輸入,則會佔用32位元,這樣的話程式執行結束系統只會處理16位元,剩下的16位元就破壞了堆疊
uint16 a; //cin >> hex >> a; scanf_s("%hd", &a);//16進位制的兩種輸入方式
(1)圖解思考
(2)程式碼實現
時間複雜度O(n) | 空間複雜度O(1)
// 三次翻轉實現 #include <iostream> #include <cstring> void reverse(char str[],int start,int end){ for( ;start < end; start++,end--){ char tmp = str[start]; str[start] = str[end]; str[end] = tmp; // start++; // end--; } } void rotateStrRight(char str[], int offset,int len){ if(str == nullptr || len == 0){ return; } offset = offset % len; // 三次翻轉 reverse(str, 0, len-offset-1); reverse(str, len-offset, len-1); reverse(str, 0, len-1); } int main(){ int steps = 2; char str[] = "12ab"; int len = strlen(str); //printf("len = %dn",len); printf("移動前: %sn", str); rotateStrRight(str,steps,len); printf("移動後:%sn", str); }
(1)說明
# 字串迴圈左移 (1)左移與右移同理,只是劃分段的方向相反,交換區間自然有區別 (2)例如:1234ab,迴圈左移4位元(從左劃分) (3)1234|ab -> 4321|ab -> 4321|ba -> ab1234 (4)例如:1234ab,迴圈右移4位元 (5)12|34ab -> 21|34ab -> 21|ba43 -> 34ab12
(2)程式碼實現
// 三次翻轉實現 #include <iostream> #include <cstring> void reverse(char str[],int start,int end){ for( ;start < end; start++,end--){ char tmp = str[start]; str[start] = str[end]; str[end] = tmp; } } void rotateStrLeft(char str[], int offset,int len){ if(str == nullptr || len == 0){ return; } offset = offset % len; // 三次翻轉 reverse(str, 0, offset-1); reverse(str, offset, len-1); reverse(str, 0, len-1); } int main(){ int steps = 3; char str[] = "1234ab"; // 4ab123 int len = strlen(str); //printf("len = %dn",len); printf("移動前: %sn", str); rotateStrLeft(str,steps,len); printf("移動後:%sn", str); }
(1)str.length / 2 = offset
(2)測試結果(8/2 = 4)
以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45